Pygtk 简明教程

PyGTK - ComboBox Class

组合框是任何 GUI 工具包中一个功能强大且流行的窗口小部件。它提供了一个下拉列表项,用户可以从中进行选择。gtk.ComboBox 窗口小部件实现了 CellLayout 接口,并提供了许多方法来管理项的显示。

gtk.ComboBox 类的对象与 ListSore 相关联,ListSore 是一个列表模型,可以与显示项目集合的窗口小部件一起使用。使用 append() 方法将项添加到 ListStore 中。此外,创建一个 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

Methods and Description

1

set_wrap_width() 设置在弹出表布局中显示的列数

2

get_active() 返回“active”属性的值,这是当前活动项模型中的索引

3

set_active() 将组合框的活动项设置为具有指定模型索引的项

4

set_model() 设置组合框所用的模型

5

append_text() 将 text 指定的字符串追加到组合框列表存储中存储的字符串列表

6

Insert_text() 在 index 指定位置插入 text 指定的字符串到组合框 gtk.ListStore

7

prepend_text() 将 text 指定的字符串前置到列表存储中存储的字符串列表

8

remove_text() 删除相关列表存储中 position 指定索引处的字符串

9

get_active_text() 返回当前活动字符串

组合框小部件发出以下信号 −

changed

在选择组合框中新的项目时发出

move_active

这是键盘绑定信号,用来移动活动选择

Popdown

这是一个键盘绑定信号,用来弹出组合框列表。此信号的默认绑定是 Alt+上箭头和 Esc

Popup

这是一个键盘绑定信号,用来弹出组合框列表。此信号的默认绑定是 Alt+下箭头

下面给出两个 ComboBox 演示示例代码。

Example 1

在这个示例中,使用流行的 Python GUI 工具包名称填充 ListStore,并将其与 ComboBox 小部件关联。当用户做出选择时,将发出 changed 信号。它连接到回调函数以显示用户的选择。

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

执行后,程序会显示以下输出 −

combobox

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

此程序的输出与上一个程序的输出类似。

combobox1