PyGTK - Dialogklasse
Ein Dialog-Widget wird normalerweise als Popup-Fenster über einem übergeordneten Fenster verwendet. Das Ziel eines Dialogs besteht darin, einige Daten vom Benutzer zu sammeln und an das übergeordnete Fenster zu senden. Der Dialog kann modal (wo er den übergeordneten Frame blockiert) oder modelllos (der Dialograhmen kann umgangen werden) sein.
Das Dialog-Widget der PyGTK-Bibliothek ist ein vertikal geteiltes Fenster. Im oberen Bereich befindet sich eine gtk.VBox, in die Label- oder Eintrags-Widgets gepackt sind. Der untere Bereich heißt action_area, in dem eine oder mehrere Schaltflächen platziert sind. Zwei Bereiche sind durch gtk.HSeparator getrennt.
Die Klasse gtk.Dialog hat den folgenden Konstruktor:
dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)
Wo,
Title - Wird der Text in der Titelleiste des Dialog-Widgets angezeigt?
Parent - Ist der Verweis auf das Fenster der obersten Ebene, aus dem der Dialog angezeigt wird.
Flag- Definiert Konstanten, die den Betrieb von Dialog steuern. Die definierten Konstanten sind -
gtk.DIALOG_MODAL | Wenn festgelegt, werden im Dialogfeld alle Tastaturereignisse erfasst |
gtk.DIALOG_DESTROY_WITH_PARENT | Wenn festgelegt, wird der Dialog zerstört, wenn sich der übergeordnete Dialog befindet. |
gtk.DIALOG_NO_SEPARATOR | Wenn festgelegt, befindet sich über den Schaltflächen keine Trennleiste. |
Was ist ein Knopf?
Ein Button ist ein Tupelobjekt, das Paare von gtk.Button mit einer Bestands-ID (oder einem Text) und seinen Antwort-IDs enthält.
Die Antwort-ID kann eine beliebige Zahl oder eine der vordefinierten Antwort-ID-Konstanten sein.
- 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
Die wichtigen Methoden der Klasse gtk.Dialog sind nachstehend aufgeführt:
add_button() - Fügt eine Schaltfläche mit dem durch angegebenen Text hinzu button_text (oder eine Bestandsschaltfläche, wenn button_text eine Bestands-ID ist) in action_area.
response() - Gibt das "Antwort" -Signal mit dem in response_id angegebenen Wert aus
run() - Zeigt den Dialog an und gibt die Antwort-ID zurück, wenn delete_event ausgegeben wird.
set_default_response() - Legt das letzte Widget im Aktionsbereich des Dialogfelds mit dem angegebenen fest response_id als Standard-Widget für den Dialog.
Das Widget gtk.Dialog gibt die folgenden Signale aus:
Schließen | Dies wird ausgegeben, wenn der Dialog geschlossen wird. |
Antwort | Dies wird ausgegeben, wenn ein action_area-Widget aktiviert ist (Schaltfläche "angeklickt"), der Dialog ein delete_event empfängt oder die Anwendung die response () -Methode aufruft. |
Zwei Schaltflächen im Aktionsbereich des Dialogfeld-Widgets verwenden die Bestands-IDs gtk.STOCK.CANCEL und gtk.STOCK_OK. Sie sind den Antwort-IDs gtk zugeordnet. RESPONSE_REJECT und gtk. RESPONSE_ACCEPT. Der Dialog wird geschlossen, wenn eine Taste gedrückt wird. Die run () -Methoden geben die entsprechende Antwort-ID zurück, die zur weiteren Verarbeitung verwendet werden kann.
Der folgende Code zeigt ein gtk.Window der obersten Ebene mit einer Schaltfläche an. Wenn Sie auf die Schaltfläche klicken, wird ein Dialogfeld mit einer Beschriftung und zwei Schaltflächen angezeigt.
Beispiel
Beachten Sie den folgenden Code -
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()
Der obige Code erzeugt die folgende Ausgabe -
Vorkonfigurierte Dialog-Widgets
Die PyGTK-API verfügt über eine Reihe vorkonfigurierter Dialog-Widgets.
- MessageDialog
- AboutDialog
- ColorSelectionDialog
- FontSelectionDialog
- FileChooserDialog
Um die Funktionsweise des obigen Standarddialogs in PyGTK zu demonstrieren, wird im folgenden Programm ein Menü mit einem Menüelement, das beim Klicken jeweils einen Dialog aufruft, in ein gtk.Window eingefügt. Die Rückruffunktionen, die auf die Aktivierung des Signals jedes Menüelements reagieren, werden aufgelistet. Sie können auch die Erläuterungen zu den einzelnen Dialog-Widget-Typen verstehen.
Beispiel
Beachten Sie den folgenden Code -
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()
Der obige Code generiert die folgende Ausgabe: