PyGTK - Lớp hộp thoại
Tiện ích hộp thoại thường được sử dụng như một cửa sổ bật lên ở trên cùng của cửa sổ mẹ. Mục tiêu của Hộp thoại là thu thập một số dữ liệu từ người dùng và gửi dữ liệu đó đến cửa sổ mẹ. Hộp thoại có thể là phương thức (trong đó nó chặn khung mẹ) hoặc không mô hình (khung hộp thoại có thể bị bỏ qua).
Tiện ích Dialog của thư viện PyGTK là một cửa sổ được chia theo chiều dọc. Trong phần trên cùng của nó, có một gtk.VBox trong đó các tiện ích Nhãn hoặc Mục nhập được đóng gói. Phần dưới cùng được gọi là action_area, trong đó một hoặc nhiều nút được đặt. Hai khu vực được phân tách bằng gtk.HSeparator.
Lớp gtk.Dialog có hàm tạo sau:
dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)
Ở đâu,
Title - Là văn bản xuất hiện trên thanh Tiêu đề của tiện ích Hộp thoại.
Parent - Là tham chiếu đến cửa sổ cấp trên cùng mà từ đó hộp thoại bật lên.
Flag- Định nghĩa các hằng số điều khiển hoạt động của Dialog. Các hằng số được xác định là -
gtk.DIALOG_MODAL | Nếu được đặt, hộp thoại sẽ lấy tất cả các sự kiện bàn phím |
gtk.DIALOG_DESTROY_WITH_PARENT | Nếu được đặt, hộp thoại sẽ bị hủy khi là hộp thoại gốc. |
gtk.DIALOG_NO_SEPARATOR | Nếu được đặt, không có thanh phân tách phía trên các nút. |
Nút là gì?
Nút là một đối tượng tuple chứa các cặp gtk.Button với ID gốc (hoặc văn bản) và các ID phản hồi của nó.
ID phản hồi có thể là bất kỳ số nào hoặc một trong các hằng số ID phản hồi được xác định trước -
- 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
Các phương thức quan trọng của lớp gtk.Dialog được đưa ra dưới đây:
add_button() - Thêm một nút với văn bản được chỉ định bởi button_text (hoặc nút cổ phiếu, nếu button_text là ID cổ phiếu) trong action_area.
response() - Phát ra tín hiệu "phản hồi" với giá trị được chỉ định trong response_id
run() - Hiển thị hộp thoại và trả về response_id khi delete_event được phát ra.
set_default_response() - Đặt tiện ích cuối cùng trong khu vực hành động của hộp thoại với response_id làm tiện ích con mặc định cho hộp thoại.
gtk.Dialog widget phát ra các tín hiệu sau:
Đóng | Điều này được phát ra khi hộp thoại đóng. |
Phản ứng | Điều này được phát ra khi một widget action_area được kích hoạt (nút "được nhấp vào"), hộp thoại nhận được một delete_event hoặc ứng dụng gọi phương thức response (). |
Hai nút trong action_area của tiện ích Dialog sử dụng Stock ID gtk.STOCK.CANCEL và gtk.STOCK_OK. Chúng được liên kết với các ID phản hồi gtk. RESPONSE_REJECT và gtk. RESPONSE_ACCEPT tương ứng. Hộp thoại đóng khi bất kỳ nút nào được nhấn. Phương thức run () trả về ID phản hồi tương ứng có thể được sử dụng để xử lý thêm.
Mã sau sẽ hiển thị gtk.Window cấp cao nhất với một Nút trong đó. Khi nút được nhấp, Hộp thoại xuất hiện với nhãn và hai nút.
Thí dụ
Quan sát đoạn mã sau:
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()
Đoạn mã trên tạo ra kết quả sau:
Các tiện ích hộp thoại được cấu hình sẵn
API PyGTK có một số tiện ích Hộp thoại được cấu hình sẵn -
- MessageDialog
- AboutDialog
- ColorSelectionDialog
- FontSelectionDialog
- FileChooserDialog
Để chứng minh hoạt động của hộp thoại tiêu chuẩn trên trong PyGTK, một menu có một mục menu gọi một hộp thoại khi được nhấp vào, được đưa vào gtk.Window trong chương trình sau. Các chức năng Gọi lại phản hồi để kích hoạt tín hiệu của từng mục menu được liệt kê. Bạn cũng có thể hiểu giải thích được cung cấp cho từng loại tiện ích hộp thoại.
Thí dụ
Quan sát đoạn mã sau:
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()
Đoạn mã trên sẽ tạo ra kết quả sau: