PyGTK - Classe de dialogue

Un widget Dialogue est normalement utilisé comme une fenêtre contextuelle au-dessus d'une fenêtre parent. L'objectif d'un dialogue est de collecter certaines données de l'utilisateur et de les envoyer à la fenêtre parente. La boîte de dialogue peut être modale (où elle bloque le cadre parent) ou non (le cadre de dialogue peut être contourné).

Le widget Dialog de la bibliothèque PyGTK est une fenêtre divisée verticalement. Dans sa section supérieure, il y a une gtk.VBox dans laquelle sont emballés des widgets d'étiquette ou d'entrée. La section inférieure est appelée action_area dans laquelle un ou plusieurs boutons sont placés. Deux zones sont séparées par gtk.HSeparator.

La classe gtk.Dialog a le constructeur suivant -

dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)

Où,

  • Title - Le texte apparaît-il dans la barre de titre du widget Dialogue.

  • Parent - Est la référence à la fenêtre de niveau supérieur à partir de laquelle la boîte de dialogue apparaît.

  • Flag- Définit les constantes contrôlant le fonctionnement de Dialog. Les constantes définies sont -

gtk.DIALOG_MODAL S'il est défini, la boîte de dialogue saisit tous les événements du clavier
gtk.DIALOG_DESTROY_WITH_PARENT S'il est défini, la boîte de dialogue est détruite lorsque son parent l'est.
gtk.DIALOG_NO_SEPARATOR S'il est défini, il n'y a pas de barre de séparation au-dessus des boutons.

Qu'est-ce qu'un bouton?

Un Button est un objet tuple contenant des paires de gtk.Button avec un ID de stock (ou texte) et ses ID de réponse.

L'ID de réponse peut être n'importe quel nombre ou l'une des constantes d'ID de réponse prédéfinies -

  • gtk.RESPONSE_NONE
  • gtk.RESPONSE_REJECT
  • gtk.RESPONSE_ACCEPT
  • gtk.RESPONSE_DELETE_EVENT
  • gtk.RESPONSE_OK
  • gtk.RESPONSE_CANCEL
  • gtk.RESPONSE_CLOSE
  • gtk.RESPONSE_YES
  • gtk.RESPONSE_NO
  • gtk.RESPONSE_APPLY
  • gtk.RESPONSE_HELP

Les méthodes importantes de la classe gtk.Dialog sont données ci-dessous -

  • add_button() - Ajoute un bouton avec le texte spécifié par button_text (ou un bouton de stock, si button_text est un ID de stock) dans action_area.

  • response() - Émet le signal "response" avec la valeur spécifiée dans response_id

  • run() - Affiche la boîte de dialogue et renvoie le response_id lorsque delete_event est émis.

  • set_default_response() - Définit le dernier widget dans la zone d'action de la boîte de dialogue avec le response_id comme widget par défaut pour la boîte de dialogue.

Le widget gtk.Dialog émet les signaux suivants -

Fermer Ceci est émis lorsque la boîte de dialogue est fermée.
Réponse Ceci est émis lorsqu'un widget action_area est activé (bouton "cliqué"), la boîte de dialogue reçoit un delete_event ou l'application appelle la méthode response ().

Deux boutons dans action_area du widget Dialog utilisent les ID de stock gtk.STOCK.CANCEL et gtk.STOCK_OK. Ils sont associés aux ID de réponse gtk. RESPONSE_REJECT et gtk. RESPONSE_ACCEPT respectivement. La boîte de dialogue se ferme lorsque vous appuyez sur un bouton. Les méthodes run () retournent l'ID de réponse correspondant qui peut être utilisé pour un traitement ultérieur.

Le code suivant affiche une fenêtre gtk.Window de niveau supérieur avec un bouton. Lorsque le bouton est cliqué, une boîte de dialogue apparaît avec une étiquette et deux boutons.

Exemple

Respectez le code suivant -

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Dialog Demo")
      self.set_default_size(250, 200)
      fixed = gtk.Fixed()
      btn = gtk.Button("Show")
      btn.connect("clicked",self.show_sialog)
      fixed.put(btn,100,100)
      self.add(fixed)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
      
   def show_sialog(self, widget, data=None):
      dialog = gtk.Dialog("My dialog",
         self,
         gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
         (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
         gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
      label = gtk.Label("Simple dialog")
      dialog.vbox.add(label)
      label.show()
      res = dialog.run()
      print res
      dialog.destroy()
if __name__ == '__main__':
   PyApp()
   gtk.main()

Le code ci-dessus produit la sortie suivante -

Widgets de dialogue préconfigurés

L'API PyGTK a un certain nombre de widgets de dialogue préconfigurés -

  • MessageDialog
  • AboutDialog
  • ColorSelectionDialog
  • FontSelectionDialog
  • FileChooserDialog

Afin de démontrer le fonctionnement de la boîte de dialogue standard ci-dessus dans PyGTK, un menu avec un élément de menu invoquant chacun une boîte de dialogue lorsque vous cliquez dessus, est placé dans un gtk.Window dans le programme suivant. Les fonctions de rappel répondant pour activer le signal de chaque élément de menu sont répertoriées. Vous pouvez également comprendre l'explication fournie pour chaque type de widget de dialogue.

Exemple

Respectez le code suivant -

import gtk, pango

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Dialog Boxes")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      mb = gtk.MenuBar()
      menu1 = gtk.Menu()
      file = gtk.MenuItem("_File")
      file.set_submenu(menu1)
      msg = gtk.MenuItem("MessageDialog")
      
      menu1.append(msg)
      abt = gtk.MenuItem("AboutDialog")
      menu1.append(abt)
      colo = gtk.MenuItem("colorDialog")
      menu1.append(colo)
      font = gtk.MenuItem("FontSelectionDialog")
      menu1.append(font)
      fl = gtk.MenuItem("FileChooserDialog")
      menu1.append(fl)
      mb.append(file)
      
      vbox = gtk.VBox(False, 2)
      vbox.pack_start(mb, False, False, 0)
      self.add(vbox)
      self.text = gtk.Label("TutorialsPoint")
      vbox.pack_start(self.text, True, True, 0)
      msg.connect("activate",self.on_msgdlg)
      abt.connect("activate",self.on_abtdlg)
      font.connect("activate",self.on_fntdlg)
      colo.connect("activate",self.on_color)
      
      fl.connect("activate", self.on_file)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   def on_msgdlg(self, widget):
      #MessageDialog usage code
   def on_abtdlg(self, widget):
      #AboutDialog usage code
   def on_fntdlg(self,widget):
      #FontSelectionDialog usage code
   def on_color(self, widget):
      #ColorChooserDialog usage cde
   Def on_file(self, widget):
      #FileChooserDialog usage code
if __name__ == '__main__':
   PyApp()
   gtk.main()

Le code ci-dessus générera la sortie suivante -