Home  Contents

Dialogs in PyGTK

نوافذ(صناديق)الحوار هى جزء مهم فى التطبيقات الرسومية، الحوار هو محادثة بين شخصين او اكثر، هنا المحادثة (المستخدم والتطبيق) وسيلة لإيصال معلومة للتطبيق. يمكن استخدامها فى اضافة بيانات ، تعديلها، او التحكم فى اعدادات البرنامج.. الخ.

يوجد نوعان (نافذة حوار معرفة مسبقا ، او واحدة اعدّت خصيصا)

Message dialogs

صناديق الرسائل هى صناديق تقدم رسائل للمستخدم مكونة من نص وصورة

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 عند الإنتهاء




Information message dialog   Warning message dialog   Question message dialog   Error message dialog

AboutDialog

صندوق "حول" 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"))

هذا السطر ينشئ اللوجو


AboutDialog

Figure: AboutDialog



FontSelectionDialog

صندوق لإختيار خط ما

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 للخط المختار


FontSelectionDialog

Figure: FontSelectionDialog



ColorSelectionDialog

صندوق لإختيار لون ما

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 نحصل على اللون ونغير اللون المستخدم للون المختار




ColorSelectionDialog

Figure: ColorSelectionDialog


Home ‡ Contents ‡ Top of Page