PyGTK - класс ComboBox
ComboBox - мощный и популярный виджет в любом наборе инструментов графического интерфейса. Он предоставляет раскрывающийся список элементов, из которых пользователь может выбирать. Виджет gtk.ComboBox реализует интерфейс CellLayout и предоставляет ряд методов для управления отображением элементов.
Объект класса gtk.ComboBox связан с ListSore, который представляет собой модель списка, которую можно использовать с виджетами, отображающими коллекцию элементов. Элементы добавляются в ListStore с помощью метода append (). Далее создается объект CellRendererText, который помещается в поле со списком.
Выполните следующие действия, чтобы настроить поле со списком.
combobox = gtk.ComboBox()
store = gtk.ListStore(gobject.TYPE_STRING)
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 0)
PyGTK предлагает удобный метод - gtk.combo_box_new_text()для создания поля со списком вместо использования хранилища списков. Связанные удобные методы append_text (), prepend_text (), insert_text () и remove_text () используются для управления содержимым поля со списком.
Класс gtk.ComboBox имеет следующие методы:
S.NO | Методы и описание |
---|---|
1 | set_wrap_width() Устанавливает количество столбцов, отображаемых в макете всплывающей таблицы |
2 | get_active() Возвращает значение «активного» свойства, которое является индексом в модели текущего активного элемента. |
3 | set_active() Устанавливает активный элемент combo_box на элемент с указанным индексом модели |
4 | set_model() Устанавливает модель, используемую полем со списком |
5 | append_text() Добавляет строку, указанную в тексте, в список строк, хранящихся в хранилище списков поля со списком |
6 | Insert_text() Вставляет строку, указанную текстом, в поле со списком gtk.ListStore по индексу, указанному в позиции |
7 | prepend_text() Добавляет строку, указанную в тексте, к списку строк, хранящихся в хранилище списков |
8 | remove_text() Удаляет строку по индексу, указанному позицией в связанном хранилище списков |
9 | get_active_text() Возвращает текущую активную строку |
Виджет ComboBox излучает следующие сигналы -
изменено | Это излучается при выборе нового элемента в поле со списком. |
move_active | Это сигнал привязки клавиш, который излучается для перемещения активного выделения. |
Всплывающее окно | Это сигнал привязки клавиш, который излучается для раскрытия списка поля со списком. Привязки по умолчанию для этого сигнала - Alt + Up и Escape. |
Выскакивать | Это сигнал привязки клавиш, который излучается для всплывающего списка поля со списком. Привязки по умолчанию для этого сигнала - Alt + Down. |
Ниже приведены два примера кода для демонстрации ComboBox.
Пример 1
В этом примере ListStore заполнен названиями популярных наборов инструментов Python GUI и связан с виджетом ComboBox. Когда пользователь делает выбор, издается измененный сигнал. Он связан с функцией обратного вызова для отображения выбора пользователя.
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()
После выполнения программа отображает следующий вывод -
Пример 2
Вторая версия программы использует удобный метод combo_box_new_text()для создания поля со списком и функции append_text () для добавления в него строк. В обеих программахget_active_text() используется для получения выбора пользователя и отображения на ярлыке в окне.
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()
Выходные данные этой программы аналогичны выходным данным предыдущей программы.