2009-12-21 8 views
2

Noob @ programmation avec python et pygtk.comment détruire correctement les objets/widgets gtk.Dialog

Je crée une application qui comprend quelques boîtes de dialogue pour l'interaction de l'utilisateur.

#!usr/bin/env python 
import gtk 
info = gtk.MessageDialog(type=gtk.DIALOG_INFO, buttons=gtk.BUTTONS_OK) 
info.set_property('title', 'Test info message') 
info.set_property('text', 'Message to be displayed in the messagebox goes here') 
if info.run() == gtk.RESPONSE_OK: 
    info.destroy() 

Cette affiche ma boîte de message, cependant, lorsque vous cliquez sur le bouton « OK » présenté dans la boîte de dialogue, rien ne se passe, la boîte gèle. Qu'est-ce que je fais mal ici?

Répondre

2

pouvez-vous me donner une dernière chance? ;)

il y a des erreurs dans votre code:

  • vous ne fermaient pas un support

  • votre syntaxe .set_property est erroné: utilisation: .set_property('property', 'value')

mais Je pense qu'ils sont des erreurs de copier/coller.

essayez ce code, ça marche pour moi. peut-être avez-vous oublié le gtk.main()?

import gtk 

info = gtk.MessageDialog(buttons=gtk.BUTTONS_OK) 
info.set_property('title', 'Test info message') 
info.set_property('text', 'Message to be displayed in the messagebox goes here') 
response = info.run() 
if response == gtk.RESPONSE_OK: 
    print 'ok' 
else: 
    print response 
info.destroy() 

gtk.main() 
+0

OK. Vous avez raison, j'ai une mauvaise syntaxe là-bas, mais ce n'est que copier/coller des erreurs, j'ai la bonne syntaxe dans mon code. J'ai juste essayé votre suggestion, et il imprime 'ok' indiquant que les résultats du test sont corrects sur la réponse, cependant, la boîte de dialogue de message est toujours solidement gelée sur l'écran après que j'appuie sur le bouton OK. Il me manque quelque chose d'autre. –

3

@mg Mon mauvais. Votre code est correct (et je suppose que mon code initial l'était aussi) La raison pour laquelle mon dialogue restait à l'écran est que ma boucle gtk.main s'exécute sur un thread séparé.

Donc tout ce que je devais était votre code enferment (version corrigée de la mienne) entre un

gtk.gdk.threads_enter() 

et

gtk.gdk.threads_leave() 

et là il était. Merci pour votre réponse.

+0

VOUS AVEZ SAUVÉ MON SANITÉ! –