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

ผลลัพธ์ของโปรแกรมนี้จะคล้ายกับของโปรแกรมก่อนหน้านี้