- PyGTK 教程
- PyGTK - 首頁
- PyGTK - 簡介
- PyGTK - 環境
- PyGTK - Hello World
- PyGTK - 重要類
- PyGTK - Window 類
- PyGTK - Button 類
- PyGTK - Label 類
- PyGTK - Entry 類
- PyGTK - 訊號處理
- PyGTK - 事件處理
- PyGTK - 容器
- PyGTK - Box 類
- PyGTK - ButtonBox 類
- PyGTK - Alignment 類
- PyGTK - EventBox 類
- PyGTK - Layout 類
- PyGTK - ComboBox 類
- PyGTK - ToggleButton 類
- PyGTK - CheckButton 類
- PyGTK - RadioButton 類
- PyGTK - MenuBar、Menu 和 MenuItem
- PyGTK - Toolbar 類
- PyGTK - Adjustment 類
- PyGTK - Range 類
- PyGTK - Scale 類
- PyGTK - Scrollbar 類
- PyGTK - Dialog 類
- PyGTK - MessageDialog 類
- PyGTK - AboutDialog 類
- PyGTK - 字型選擇對話方塊
- PyGTK - 顏色選擇對話方塊
- PyGTK - 檔案選擇對話方塊
- PyGTK - Notebook 類
- PyGTK - Frame 類
- PyGTK - AspectFrame 類
- PyGTK - TreeView 類
- PyGTK - Paned 類
- PyGTK - Statusbar 類
- PyGTK - ProgressBar 類
- PyGTK - Viewport 類
- PyGTK - Scrolledwindow 類
- PyGTK - Arrow 類
- PyGTK - Image 類
- PyGTK - DrawingArea 類
- PyGTK - SpinButton 類
- PyGTK - Calendar 類
- PyGTK - Clipboard 類
- PyGTK - Ruler 類
- PyGTK - 超時
- PyGTK - 拖放
- PyGTK 有用資源
- PyGTK - 快速指南
- PyGTK - 有用資源
- PyGTK - 討論
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 中,在 position 指定的索引處插入 text 指定的字串。 |
| 7 | prepend_text() 將 text 指定的字串預置到列表儲存中儲存的字串列表中。 |
| 8 | remove_text() 刪除關聯列表儲存中 position 指定索引處的字串。 |
| 9 | get_active_text() 返回當前活動的字串。 |
ComboBox 小部件發出以下訊號:
| changed | 在組合框中選擇新專案時發出。 |
| move_active | 這是一個鍵繫結訊號,發出以移動活動選擇。 |
| Popdown | 這是一個鍵繫結訊號,發出以彈出組合框列表。此訊號的預設繫結是 Alt+Up 和 Escape。 |
| Popup | 這是一個鍵繫結訊號,發出以彈出組合框列表。此訊號的預設繫結是 Alt+Down。 |
下面給出兩個組合框演示示例程式碼。
示例 1
在此示例中,ListStore 使用流行的 Python GUI 工具包的名稱填充,並與 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()
執行後,程式顯示以下輸出:
示例 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()
此程式的輸出與上一個程式的輸出類似。