نوافذ(صناديق)الحوار هى جزء مهم فى التطبيقات الرسومية، الحوار هو محادثة بين شخصين او اكثر، هنا المحادثة (المستخدم والتطبيق) وسيلة لإيصال معلومة للتطبيق. يمكن استخدامها فى اضافة بيانات ، تعديلها، او التحكم فى اعدادات البرنامج.. الخ.
يوجد نوعان (نافذة حوار معرفة مسبقا ، او واحدة اعدّت خصيصا)
صناديق الرسائل هى صناديق تقدم رسائل للمستخدم مكونة من نص وصورة
messages.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows message # dialogs # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(250, 100) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("Message dialogs") table = gtk.Table(2, 2, True); info = gtk.Button("Information") warn = gtk.Button("Warning") ques = gtk.Button("Question") erro = gtk.Button("Error") info.connect("clicked", self.on_info) warn.connect("clicked", self.on_warn) ques.connect("clicked", self.on_ques) erro.connect("clicked", self.on_erro) table.attach(info, 0, 1, 0, 1) table.attach(warn, 1, 2, 0, 1) table.attach(ques, 0, 1, 1, 2) table.attach(erro, 1, 2, 1, 2) self.add(table) self.show_all() def on_info(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, "Download completed") md.run() md.destroy() def on_erro(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, "Error loading file") md.run() md.destroy() def on_ques(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_CLOSE, "Are you sure to quit?") md.run() md.destroy() def on_warn(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, "Unallowed operation") md.run() md.destroy() PyApp() gtk.main()
فى مثالنا سنعرض 4 انواع من صناديق الرسائل (معلومات، تحذير، سؤال، خطأ)
info = gtk.Button("Information") warn = gtk.Button("Warning") ques = gtk.Button("Question") erro = gtk.Button("Error")
لدينا 4 ازرار كل منها سيعرض رسالة مختلفة
md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, "Download completed") md.run() md.destroy()
اذا ضغطنا على الزر info فيتم عرض صندوق رسالة معلومة. و MESSAGE_INFO يحدد نوعها على انها رسالة معلومة. و BUTTONS_CLOSE يحدد الأزرار الظاهرة مع الرسالة، والمعامل الأخير هو الرسالة.
يتم عرض الرسالة بإستخدام الطريقة Run، ويجب على المبرمج استدعاء اى من الطرق Destroy او Hide عند الإنتهاء
صندوق "حول" AboutDialog مسئول عن عرض معلومات حول التطبيق.. تستطيع عرض اللوجو واسم التطبيق، والإصدار، والحقوق، والموقع ، ومعلومات عن الرخصة وايضا التعبير عن امتننانك للكتاب والموثقين والمترجمين والمصممين
aboutdialog.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example demonstrates the # AboutDialog dialog # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(300, 150) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("About battery") button = gtk.Button("About") button.set_size_request(80, 30) button.connect("clicked", self.on_clicked) fix = gtk.Fixed() fix.put(button, 20, 20) self.add(fix) self.show_all() def on_clicked(self, widget): about = gtk.AboutDialog() about.set_program_name("Battery") about.set_version("0.1") about.set_copyright("(c) Jan Bodnar") about.set_comments("Battery is a simple tool for battery checking") about.set_website("http://www.zetcode.com") about.set_logo(gtk.gdk.pixbuf_new_from_file("battery.png")) about.run() about.destroy() PyApp() gtk.main()
هذا المثال يستخدم بعض مميزات الصف AboutDialog
about = gtk.AboutDialog()ننشئ كائن من الصف AboutDialog
about = gtk.AboutDialog() about.set_program_name("Battery") about.set_version("0.1") about.set_copyright("(c) Jan Bodnar")
تحديد اسم البرنامج والإصدار وحقوق النسخ
about.set_logo(gtk.gdk.pixbuf_new_from_file("battery.png"))هذا السطر ينشئ اللوجو
Figure: AboutDialog
صندوق لإختيار خط ما
fontdialog.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example works with the # FontSelection dialog # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import pango class PyApp(gtk.Window): def __init__(self): gtk.Window.__init__(self) self.set_size_request(300, 150) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("Font Selection Dialog") self.label = gtk.Label("The only victory over love is flight.") button = gtk.Button("Select font") button.connect("clicked", self.on_clicked) fix = gtk.Fixed() fix.put(button, 100, 30) fix.put(self.label, 30, 90) self.add(fix) self.show_all() def on_clicked(self, widget): fdia = gtk.FontSelectionDialog("Select font name") response = fdia.run() if response == gtk.RESPONSE_OK: font_desc = pango.FontDescription(fdia.get_font_name()) if font_desc: self.label.modify_font(font_desc) fdia.destroy() PyApp() gtk.main()
فى هذه الجزئية لدينا زر و label ، ونعرض صندوق اختيار الخط عند الضغط على الزر
fdia = gtk.FontSelectionDialog("Select font name")ننشئ كائن صندوق اختيار الخط
if response == gtk.RESPONSE_OK: font_desc = pango.FontDescription(fdia.get_font_name()) if font_desc: self.label.modify_font(font_desc)
اذا ضغطنا زر OK يتم تعديل الخط الخاص بال label للخط المختار
Figure: FontSelectionDialog
صندوق لإختيار لون ما
colordialog.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example works with the # ColorSelection dialog # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(300, 150) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("Color Selection Dialog") self.label = gtk.Label("The only victory over love is flight.") button = gtk.Button("Select color") button.connect("clicked", self.on_clicked) fix = gtk.Fixed() fix.put(button, 100, 30) fix.put(self.label, 30, 90) self.add(fix) self.show_all() def on_clicked(self, widget): cdia = gtk.ColorSelectionDialog("Select color") response = cdia.run() if response == gtk.RESPONSE_OK: colorsel = cdia.colorsel color = colorsel.get_current_color() self.label.modify_fg(gtk.STATE_NORMAL, color) cdia.destroy() PyApp() gtk.main()
هذا المثال مشابه للأعلى ولكن حان الوقت لنغير لون ال label
cdia = gtk.ColorSelectionDialog("Select color")ننشئ كائن صندوق اختيار اللون
if response == gtk.RESPONSE_OK: colorsel = cdia.colorsel color = colorsel.get_current_color() self.label.modify_fg(gtk.STATE_NORMAL, color)
اذا ضغطنا OK نحصل على اللون ونغير اللون المستخدم للون المختار
Figure: ColorSelectionDialog
Home Contents Top of Page