Учебники

PyGTK – класс ComboBox

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()

Вывод этой программы аналогичен предыдущей программе.