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 มีวิธีการดังนี้ -
ส. อบจ | วิธีการและคำอธิบาย |
---|---|
1 | set_wrap_width() ตั้งค่าจำนวนคอลัมน์ที่จะแสดงในเค้าโครงตารางป๊อปอัป |
2 | get_active() ส่งกลับค่าของคุณสมบัติ "active" ซึ่งเป็นดัชนีในโมเดลของรายการที่ใช้งานอยู่ในปัจจุบัน |
3 | set_active() ตั้งค่ารายการที่ใช้งานอยู่ของ combo_box เป็นรายการที่มีการระบุดัชนีโมเดล |
4 | set_model() ตั้งค่าโมเดลที่ใช้โดยกล่องคำสั่งผสม |
5 | append_text() ต่อท้ายสตริงที่ระบุโดยข้อความเข้ากับรายการสตริงที่จัดเก็บในที่เก็บรายการกล่องคำสั่งผสม |
6 | Insert_text() แทรกสตริงที่ระบุโดยข้อความในกล่องคำสั่งผสม gtk.ListStore ที่ดัชนีที่ระบุโดยตำแหน่ง |
7 | prepend_text() นำหน้าสตริงที่ระบุโดยข้อความไปยังรายการสตริงที่เก็บไว้ในที่เก็บรายการ |
8 | remove_text() ลบสตริงที่ดัชนีที่ระบุโดยตำแหน่งใน liststore ที่เกี่ยวข้อง |
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()
ผลลัพธ์ของโปรแกรมนี้จะคล้ายกับของโปรแกรมก่อนหน้านี้