2009-02-23 8 views
3

J'ai une boîte AboutDialog en clairière, mais le bouton Fermer ne fonctionne pas. Je ne sais pas comment connecter ce bouton à une fonction séparée, car il se trouve dans un widget appelé dialog-action_area. Un autre problème est que si j'utilise le bouton de fermeture créé par le gestionnaire de fenêtres, je ne peux pas l'ouvrir à nouveau car il a été détruit.glade aboutDialog ne se ferme pas

Comment puis-je changer cela afin qu'il se cache?

Répondre

5

Vous devez appeler la méthode peau de widget() lorsque vous recevez supprimer ou d'annuler des signaux:

response = self.wTree.get_widget("aboutdialog1").run() # or however you run it 
if response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_CANCEL: 
    self.wTree.get_widget("aboutdialog1").hide() 

Vous pouvez trouver le type de réponse constantes in the GTK documentation

+0

Il travaille, et je pense avoir une meilleure compréhension de la façon dont tout cela fonctionne, merci encore pour votre aide. – wodemoneke

+0

Quelqu'un peut-il me dire comment faire une fenêtre à propos de montrer quand je clique sur un bouton "à propos" dans ruby ​​glade? –

+0

Cela fonctionne également dans l'API Python GTK + 3, à compter du 9 août 2017. – silviubogan

6

Comme toute autre fenêtre de dialogue, ils vous demandent à

  1. Utilisez la méthode run.
  2. Faire usage du signal « Reponse »

Le premier bloquera la boucle principale et sera de retour dès que la boîte de dialogue reçoit une réponse, cela peut être, cliquez sur un bouton dans la zone d'action ou appuyez sur Esc, ou appelez la méthode de réponse du dialogue ou "détruire" la fenêtre, les derniers ne signifient pas que la fenêtre sera détruite, cela signifie que la méthode run() quittera et retournera une réponse. comme ceci:

response = dialog.run() 

Si vous utilisez un débogueur, vous remarquerez que la boucle principale reste jusqu'à ce que vous cliquez sur un bouton ou d'essayer de fermer la boîte de dialogue. Une fois que vous avez reçu votre réponse, vous pouvez l'utiliser comme vous le souhaitez.

response = dialog.run() 
if response == gtk.RESPONSE_OK: 
    #do something here if the user hit the OK button 
dialog.destroy() 

La seconde vous permettra d'utiliser la boîte de dialogue dans une substance non-bloquant, alors vous devez connecter votre dialogue au signal « réponse ».

def do_response(dialog, response): 
    if response == gtk.RESPONSE_OK: 
     #do something here if the user hit the OK button 
    dialog.destroy() 

dialog.connect('response', do_response) 

, vous remarquez Maintenant que vous devez détruire votre boîte de dialogue

Questions connexes