ComboBox — это мощный и популярный виджет в любом GUI-инструментарии. Он предоставляет раскрывающийся список элементов, из которых пользователь может выбирать. Виджет 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 |
установить активное() Устанавливает активный элемент combo_box на элемент с указанным модельным индексом |
4 |
set_model () Устанавливает модель, используемую в поле со списком |
5 |
append_text () Добавляет строку, заданную текстом, в список строк, хранящихся в хранилище списка со списком |
6 |
Insert_text () Вставляет строку, заданную текстом, в поле со списком gtk.ListStore по индексу, указанному позицией |
7 |
prepend_text () Добавляет строку, указанную в тексте, в список строк, хранящихся в хранилище списка. |
8 |
remove_text () Удаляет строку по индексу, указанному позицией в связанном хранилище списков |
9 |
get_active_text () Возвращает текущую активную строку |
set_wrap_width ()
Устанавливает количество столбцов, которые будут отображаться в макете всплывающей таблицы
get_active ()
Возвращает значение «активного» свойства, которое является индексом в модели текущего активного элемента.
установить активное()
Устанавливает активный элемент combo_box на элемент с указанным модельным индексом
set_model ()
Устанавливает модель, используемую в поле со списком
append_text ()
Добавляет строку, заданную текстом, в список строк, хранящихся в хранилище списка со списком
Insert_text ()
Вставляет строку, заданную текстом, в поле со списком gtk.ListStore по индексу, указанному позицией
prepend_text ()
Добавляет строку, указанную в тексте, в список строк, хранящихся в хранилище списка.
remove_text ()
Удаляет строку по индексу, указанному позицией в связанном хранилище списков
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()
Вывод этой программы аналогичен предыдущей программе.