PyGTK - ComboBox 类

  • 简述

    ComboBox 是任何 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 类有以下方法 -
    序号 方法和说明
    1
    set_wrap_width()
    设置要在弹出表格布局中显示的列数
    2
    get_active()
    返回“active”属性的值,它是当前活动项在模型中的索引
    3
    set_active()
    将combo_box的活动项设置为指定模型索引的项
    4
    set_model()
    设置组合框使用的模型
    5
    append_text()
    将 text 指定的字符串追加到组合框列表存储中存储的字符串列表中
    6
    Insert_text()
    将组合框gtk.ListStore中text指定的字符串插入到position指定的索引处
    7
    prepend_text()
    将 text 指定的字符串添加到存储在列表存储中的字符串列表中
    8
    remove_text()
    删除关联列表存储中位置指定索引处的字符串
    9
    get_active_text()
    返回当前激活的字符串
    ComboBox 小部件发出以下信号 -
    时会发出。
    changed 选择组合框中的新项目
    move_active 这是一个键绑定信号,它被发射以移动活动选择。
    Popdown 这是一个键绑定信号,它被发射以弹出组合框列表。此信号的默认绑定是 Alt+Up 和 Escape
    Popup 这是一个键绑定信号,用于弹出组合框列表。此信号的默认绑定是 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()
    
    执行后,程序显示以下输出 -
    ComboBox
  • 示例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()
    
    本程序的输出与上一个程序类似。
    ComboBox