PyGTK - คลาสโต้ตอบ
โดยปกติวิดเจ็ตไดอะล็อกจะใช้เป็นหน้าต่างป๊อปอัปที่ด้านบนของหน้าต่างหลัก วัตถุประสงค์ของกล่องโต้ตอบคือการรวบรวมข้อมูลบางส่วนจากผู้ใช้และส่งไปยังหน้าต่างหลัก กล่องโต้ตอบสามารถเป็นโมดอล (โดยที่บล็อกเฟรมหลัก) หรือไม่มีโหมด (สามารถข้ามกรอบโต้ตอบได้)
วิดเจ็ต Dialog ของไลบรารี PyGTK คือหน้าต่างที่แบ่งออกในแนวตั้ง ในส่วนบนสุดมี gtk.VBox ซึ่งบรรจุป้ายกำกับหรือวิดเจ็ตรายการ ส่วนด้านล่างเรียกว่า action_area ซึ่งมีการวางปุ่มอย่างน้อยหนึ่งปุ่ม พื้นที่สองส่วนถูกคั่นด้วย gtk.HSeparator
gtk.Dialog คลาสมีตัวสร้างต่อไปนี้ -
dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)
ที่ไหน
Title - ข้อความที่ปรากฏในแถบชื่อเรื่องของวิดเจ็ต Dialog หรือไม่
Parent - เป็นการอ้างอิงไปยังหน้าต่างระดับบนสุดที่กล่องโต้ตอบจะปรากฏขึ้น
Flag- กำหนดค่าคงที่ควบคุมการทำงานของ Dialog ค่าคงที่ที่กำหนดคือ -
gtk.DIALOG_MODAL | หากตั้งค่าไว้กล่องโต้ตอบจะจับเหตุการณ์แป้นพิมพ์ทั้งหมด |
gtk.DIALOG_DESTROY_WITH_PARENT | หากตั้งค่าไว้กล่องโต้ตอบจะถูกทำลายเมื่อพาเรนต์อยู่ |
gtk.DIALOG_NO_SEPARATOR | หากตั้งค่าไว้จะไม่มีแถบคั่นเหนือปุ่ม |
ปุ่มคืออะไร?
ปุ่มคือวัตถุทูเพิลที่มีคู่ของ gtk ปุ่มที่มีรหัสหุ้น (หรือข้อความ) และรหัสการตอบกลับ
ID การตอบกลับอาจเป็นตัวเลขใดก็ได้หรือค่าคงที่ของรหัสการตอบกลับที่กำหนดไว้ล่วงหน้า -
- gtk.RESPONSE_NONE
- gtk.RESPONSE_REJECT
- gtk.RESPONSE_ACCEPT
- gtk.RESPONSE_DELETE_EVENT
- gtk.RESPONSE_OK
- gtk.RESPONSE_CANCEL
- gtk.RESPONSE_CLOSE
- gtk.RESPONSE_YES
- gtk.RESPONSE_NO
- gtk.RESPONSE_APPLY
- gtk.RESPONSE_HELP
วิธีการที่สำคัญของคลาส gtk.Dialog ได้รับด้านล่าง -
add_button() - เพิ่มปุ่มที่มีข้อความที่ระบุโดย button_text (หรือปุ่มหุ้นหาก button_text เป็นรหัสหุ้น) ใน action_area
response() - ส่งสัญญาณ "response" พร้อมค่าที่ระบุใน response_id
run() - แสดงไดอะล็อกและส่งกลับ response_id เมื่อ delete_event ถูกปล่อยออกมา
set_default_response() - ตั้งค่าวิดเจ็ตสุดท้ายในพื้นที่การดำเนินการของไดอะล็อกตามที่ระบุ response_id เป็นวิดเจ็ตเริ่มต้นสำหรับกล่องโต้ตอบ
gtk.Dialog วิดเจ็ตปล่อยสัญญาณต่อไปนี้ -
ปิด | สิ่งนี้จะปรากฏขึ้นเมื่อปิดกล่องโต้ตอบ |
การตอบสนอง | สิ่งนี้ถูกปล่อยออกมาเมื่อเปิดใช้งานวิดเจ็ต action_area (ปุ่ม "คลิก") กล่องโต้ตอบจะได้รับ delete_event หรือแอปพลิเคชันเรียกใช้เมธอด response () |
สองปุ่มใน action_area ของวิดเจ็ต Dialog ใช้ Stock IDs gtk.STOCK.CANCEL และ gtk.STOCK_OK ซึ่งเชื่อมโยงกับรหัสการตอบกลับ gtk RESPONSE_REJECT และ gtk RESPONSE_ACCEPT ตามลำดับ กล่องโต้ตอบจะปิดเมื่อกดปุ่มใด ๆ วิธีการ run () ส่งคืน ID การตอบกลับที่สอดคล้องกันซึ่งอาจใช้สำหรับการประมวลผลต่อไป
รหัสต่อไปนี้แสดง gtk ระดับบนสุดหน้าต่างที่มีปุ่มอยู่ เมื่อคลิกปุ่มกล่องโต้ตอบจะปรากฏขึ้นพร้อมป้ายกำกับและปุ่มสองปุ่ม
ตัวอย่าง
สังเกตรหัสต่อไปนี้ -
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Dialog Demo")
self.set_default_size(250, 200)
fixed = gtk.Fixed()
btn = gtk.Button("Show")
btn.connect("clicked",self.show_sialog)
fixed.put(btn,100,100)
self.add(fixed)
self.connect("destroy", gtk.main_quit)
self.show_all()
def show_sialog(self, widget, data=None):
dialog = gtk.Dialog("My dialog",
self,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
label = gtk.Label("Simple dialog")
dialog.vbox.add(label)
label.show()
res = dialog.run()
print res
dialog.destroy()
if __name__ == '__main__':
PyApp()
gtk.main()
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -
วิดเจ็ตไดอะล็อกที่กำหนดค่าไว้ล่วงหน้า
PyGTK API มีวิดเจ็ต Dialog ที่กำหนดค่าไว้ล่วงหน้าจำนวนหนึ่ง -
- MessageDialog
- AboutDialog
- ColorSelectionDialog
- FontSelectionDialog
- FileChooserDialog
เพื่อแสดงให้เห็นถึงการทำงานของกล่องโต้ตอบมาตรฐานข้างต้นใน PyGTK เมนูที่มีรายการเมนูที่เรียกใช้กล่องโต้ตอบเมื่อคลิกจะถูกใส่ไว้ใน gtk.Window ในโปรแกรมต่อไปนี้ ฟังก์ชันการโทรกลับที่ตอบสนองต่อการเปิดใช้งานสัญญาณของรายการเมนูแต่ละรายการจะแสดงรายการ คุณยังสามารถเข้าใจคำอธิบายที่ให้ไว้สำหรับวิดเจ็ตโต้ตอบแต่ละประเภท
ตัวอย่าง
สังเกตรหัสต่อไปนี้ -
import gtk, pango
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Dialog Boxes")
self.set_default_size(250, 200)
self.set_position(gtk.WIN_POS_CENTER)
mb = gtk.MenuBar()
menu1 = gtk.Menu()
file = gtk.MenuItem("_File")
file.set_submenu(menu1)
msg = gtk.MenuItem("MessageDialog")
menu1.append(msg)
abt = gtk.MenuItem("AboutDialog")
menu1.append(abt)
colo = gtk.MenuItem("colorDialog")
menu1.append(colo)
font = gtk.MenuItem("FontSelectionDialog")
menu1.append(font)
fl = gtk.MenuItem("FileChooserDialog")
menu1.append(fl)
mb.append(file)
vbox = gtk.VBox(False, 2)
vbox.pack_start(mb, False, False, 0)
self.add(vbox)
self.text = gtk.Label("TutorialsPoint")
vbox.pack_start(self.text, True, True, 0)
msg.connect("activate",self.on_msgdlg)
abt.connect("activate",self.on_abtdlg)
font.connect("activate",self.on_fntdlg)
colo.connect("activate",self.on_color)
fl.connect("activate", self.on_file)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_msgdlg(self, widget):
#MessageDialog usage code
def on_abtdlg(self, widget):
#AboutDialog usage code
def on_fntdlg(self,widget):
#FontSelectionDialog usage code
def on_color(self, widget):
#ColorChooserDialog usage cde
Def on_file(self, widget):
#FileChooserDialog usage code
if __name__ == '__main__':
PyApp()
gtk.main()
โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -