PyGTK - Klasa ComboBox
ComboBox to potężny i popularny widżet w każdym zestawie narzędzi GUI. Zawiera rozwijaną listę elementów, z których użytkownik może wybierać. Widżet gtk.ComboBox implementuje interfejs CellLayout i udostępnia szereg metod zarządzania wyświetlaniem elementów.
Obiekt klasy gtk.ComboBox jest powiązany z ListSore, czyli modelem listy, którego można używać z widżetami wyświetlającymi kolekcję elementów. Elementy są dodawane do ListStore za pomocą metody append (). Ponadto tworzony jest obiekt CellRendererText i umieszczany w polu combobox.
Wykonaj następujące kroki, aby skonfigurować combobox.
combobox = gtk.ComboBox()
store = gtk.ListStore(gobject.TYPE_STRING)
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 0)PyGTK oferuje wygodną metodę - gtk.combo_box_new_text()aby utworzyć pole kombi zamiast korzystać z magazynu list. Powiązane wygodne metody append_text (), prepend_text (), insert_text () i remove_text () są używane do zarządzania zawartością pola kombi.
Klasa gtk.ComboBox ma następujące metody -
| S.NO | Metody i opis | 
|---|---|
| 1 | set_wrap_width() Ustawia liczbę kolumn wyświetlanych w wyskakującym układzie tabeli | 
| 2 | get_active() Zwraca wartość właściwości „active”, która jest indeksem w modelu aktualnie aktywnej pozycji | 
| 3 | set_active() Ustawia aktywny element combo_box na element z określonym indeksem modelu | 
| 4 | set_model() Ustawia model używany przez pole kombi | 
| 5 | append_text() Dołącza ciąg określony przez tekst do listy ciągów przechowywanych w magazynie list pól kombi | 
| 6 | Insert_text() Wstawia ciąg określony przez tekst w polu kombi gtk.ListStore pod indeksem określonym przez pozycję | 
| 7 | prepend_text() Dołącza ciąg określony przez tekst do listy ciągów przechowywanych w magazynie list | 
| 8 | remove_text() Usuwa ciąg z indeksu określonego przez pozycję w skojarzonym magazynie list | 
| 9 | get_active_text() Zwraca aktualnie aktywny ciąg | 
Widżet ComboBox emituje następujące sygnały -
| zmieniony | Jest to emitowane po wybraniu nowej pozycji w polu kombi | 
| move_active | Jest to sygnał przypisania klawisza, który jest emitowany w celu przesunięcia aktywnego wyboru. | 
| Popdown | Jest to sygnał klawiszowy, który jest emitowany w celu wyświetlenia listy rozwijanej. Domyślne powiązania dla tego sygnału to Alt + Up i Escape | 
| Popup | Jest to sygnał przypisania klawisza, który jest emitowany w celu wyświetlenia listy rozwijanej listy rozwijanej. Domyślne powiązania dla tego sygnału to Alt + Down. | 
Poniżej podano dwa przykładowe kody do demonstracji ComboBox.
Przykład 1
W tym przykładzie ListStore jest wypełniony nazwami popularnych zestawów narzędzi GUI języka Python i jest powiązany z widżetem ComboBox. Kiedy użytkownik dokonuje wyboru, emitowany jest zmieniony sygnał. Jest połączony z funkcją wywołania zwrotnego w celu wyświetlenia wyboru użytkownika.
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()Po wykonaniu program wyświetla następujące dane wyjściowe -
 
                Przykład 2
Druga wersja programu wykorzystuje metodę wygodną combo_box_new_text()aby utworzyć pole kombi i funkcję append_text (), aby dodać do niej ciągi znaków. W obu programachget_active_text() Metoda służy do pobrania wyboru użytkownika i wyświetlenia na etykiecie w oknie.
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()Dane wyjściowe tego programu są podobne do wyników poprzedniego programu.
