PyGTK - ComboBox-Klasse
ComboBox ist ein leistungsstarkes und beliebtes Widget in jedem GUI-Toolkit. Es enthält eine Dropdown-Liste mit Elementen, aus denen ein Benutzer auswählen kann. Das Widget gtk.ComboBox implementiert die CellLayout-Oberfläche und bietet eine Reihe von Methoden zum Verwalten der Anzeige von Elementen.
Das Objekt der Klasse gtk.ComboBox ist einem ListSore zugeordnet. Hierbei handelt es sich um ein Listenmodell, das mit Widgets verwendet werden kann, die eine Sammlung von Elementen anzeigen. Elemente werden mit der append () -Methode zum ListStore hinzugefügt. Außerdem wird ein CellRendererText-Objekt erstellt und in die Combobox gepackt.
Befolgen Sie diese Schritte, um eine Combobox einzurichten.
combobox = gtk.ComboBox()
store = gtk.ListStore(gobject.TYPE_STRING)
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 0)
PyGTK bietet eine bequeme Methode - gtk.combo_box_new_text()um ein Kombinationsfeld zu erstellen, anstatt einen Listenspeicher zu verwenden. Zugehörige Convenience-Methoden append_text (), prepend_text (), insert_text () und remove_text () werden zum Verwalten der Kombinationsfeldinhalte verwendet.
Die Klasse gtk.ComboBox verfügt über die folgenden Methoden:
S.NO. | Methoden und Beschreibung |
---|---|
1 | set_wrap_width() Legt die Anzahl der Spalten fest, die im Popup-Tabellenlayout angezeigt werden sollen |
2 | get_active() Gibt den Wert der Eigenschaft "active" zurück, die der Index im Modell des aktuell aktiven Elements ist |
3 | set_active() Legt das aktive Element des Kombinationsfelds auf das Element mit dem angegebenen Modellindex fest |
4 | set_model() Legt das vom Kombinationsfeld verwendete Modell fest |
5 | append_text() Hängt die durch Text angegebene Zeichenfolge an die Liste der im Kombinationsfeld-Listenspeicher gespeicherten Zeichenfolgen an |
6 | Insert_text() Fügt die durch Text angegebene Zeichenfolge in das Kombinationsfeld gtk.ListStore an dem durch position angegebenen Index ein |
7 | prepend_text() Stellt die durch Text angegebene Zeichenfolge der Liste der im Listenspeicher gespeicherten Zeichenfolgen voran |
8 | remove_text() Entfernt die Zeichenfolge an dem Index, der durch die Position im zugehörigen Listenspeicher angegeben wird |
9 | get_active_text() Gibt die aktuell aktive Zeichenfolge zurück |
Das ComboBox-Widget sendet die folgenden Signale aus:
geändert | Dies wird ausgegeben, wenn ein neues Element im Kombinationsfeld ausgewählt wird |
move_active | Dies ist ein Tastenbindungssignal, das ausgegeben wird, um die aktive Auswahl zu verschieben. |
Popdown | Dies ist ein Tastenkombinationssignal, das ausgegeben wird, um die Kombinationsfeldliste zu öffnen. Die Standardbindungen für dieses Signal sind Alt + Up und Escape |
Aufpoppen | Dies ist ein Tastenkombinationssignal, das ausgegeben wird, um die Kombinationsfeldliste zu öffnen. Die Standardbindungen für dieses Signal sind Alt + Ab. |
Im Folgenden finden Sie zwei Beispielcodes für die Demonstration der ComboBox.
Beispiel 1
In diesem Beispiel wird ein ListStore mit den Namen gängiger Python-GUI-Toolkits gefüllt und einem ComboBox-Widget zugeordnet. Wenn ein Benutzer eine Auswahl trifft, wird das geänderte Signal ausgegeben. Es ist mit einer Rückruffunktion verbunden, um die Auswahl des Benutzers anzuzeigen.
import pygtk
pygtk.require('2.0')
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("ComboBox with ListStore")
self.set_default_size(250, 200)
self.set_position(gtk.WIN_POS_CENTER)
combobox = gtk.ComboBox()
store = gtk.ListStore(str)
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 0)
fixed = gtk.Fixed()
lbl = gtk.Label("select a GUI toolkit")
fixed.put(lbl, 25,75)
fixed.put(combobox, 125,75)
lbl2 = gtk.Label("Your choice is:")
fixed.put(lbl2, 25,125)
self.label = gtk.Label("")
fixed.put(self.label, 125,125)
self.add(fixed)
store.append (["PyQt"])
store.append (["Tkinter"])
store.append (["WxPython"])
store.append (["PyGTK"])
store.append (["PySide"])
combobox.set_model(store)
combobox.connect('changed', self.on_changed)
combobox.set_active(0)
self.connect("destroy", gtk.main_quit)
self.show_all()
return
def on_changed(self, widget):
self.label.set_label(widget.get_active_text())
return
if __name__ == '__main__':
PyApp()
gtk.main()
Bei der Ausführung zeigt das Programm die folgende Ausgabe an:
Beispiel 2
Die zweite Version des Programms verwendet die Convenience-Methode combo_box_new_text()Erstellen eines Kombinationsfelds und der Funktion append_text () zum Hinzufügen von Zeichenfolgen. In beiden Programmen ist dieget_active_text() Die Methode wird verwendet, um die Auswahl des Benutzers abzurufen und auf einem Etikett im Fenster anzuzeigen.
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Simple ComboBox")
self.set_default_size(250, 200)
self.set_position(gtk.WIN_POS_CENTER)
cb = gtk.combo_box_new_text()
cb.connect("changed", self.on_changed)
cb.append_text('PyQt')
cb.append_text('Tkinter')
cb.append_text('WxPython')
cb.append_text('PyGTK')
cb.append_text('PySide')
fixed = gtk.Fixed()
lbl = gtk.Label("select a GUI toolkit")
fixed.put(lbl, 25,75)
fixed.put(cb, 125,75)
lbl2 = gtk.Label("Your choice is:")
fixed.put(lbl2, 25,125)
self.label = gtk.Label("")
fixed.put(self.label, 125,125)
self.add(fixed)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_changed(self, widget):
self.label.set_label(widget.get_active_text())
if __name__ == '__main__':
PyApp()
gtk.main()
Die Ausgabe dieses Programms ähnelt der des vorherigen Programms.