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 -