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

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