Home  Contents

Toolbars in PyGTK

فى هذه الجزئية سنتعامل مع شرائط الأدوات.تقوم القوائم بتجميع كل الأوامر ولكن يقوم شريط الأدوات بتوفير وصول سريع لأكثر الأوامر المستخدمه من شريط القوائم

Simple toolbar

فى التالى سننشئ شريط ادوات بسيط

toolbar.py
 
#!/usr/bin/python

# ZetCode PyGTK tutorial 
#
# This example shows a toolbar
# widget
#
# 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_title("Toolbar")
        self.set_size_request(250, 200)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
        self.set_position(gtk.WIN_POS_CENTER)

        toolbar = gtk.Toolbar()
        toolbar.set_style(gtk.TOOLBAR_ICONS)

        newtb = gtk.ToolButton(gtk.STOCK_NEW)
        opentb = gtk.ToolButton(gtk.STOCK_OPEN)
        savetb = gtk.ToolButton(gtk.STOCK_SAVE)
        sep = gtk.SeparatorToolItem()
        quittb = gtk.ToolButton(gtk.STOCK_QUIT)

        toolbar.insert(newtb, 0)
        toolbar.insert(opentb, 1)
        toolbar.insert(savetb, 2)
        toolbar.insert(sep, 3)
        toolbar.insert(quittb, 4)
        
        quittb.connect("clicked", gtk.main_quit)

        vbox = gtk.VBox(False, 2)
        vbox.pack_start(toolbar, False, False, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()
        
       
PyApp()
gtk.main()

المثال يشرح انشاء شريط ادوات و 4 ازرار

 toolbar = gtk.Toolbar()

انشاء شريط الأدوات

 toolbar.set_style(gtk.TOOLBAR_ICONS)

سنعرض ايكونات فقط لانص -text-

 newtb = gtk.ToolButton(gtk.STOCK_NEW)

انشاء الويدجت ToolButton مع صورة من ال stock

 sep = gtk.SeparatorToolItem()

هذا العنصر فاصل بين مكونات شريط الأدوات لتقسيم لمجموعات منطقية

 toolbar.insert(newtb, 0)
 toolbar.insert(opentb, 1)
 ...

اضافة الأزرار لشريط الأدوات


Toolbar

Figure: Toolbar



Toolbars

فى المثال التالى سننشئ شريطى ادوات، الكثير من التطبيقات لها اكثر من شريط ادوات.. سنعرض كيفية عمل ذلك

toolbars.py
 
#!/usr/bin/python

# ZetCode PyGTK tutorial 
#
# This example shows two toolbars
# in the application window
#
# 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_title("Toolbars")
        self.set_size_request(350, 300)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
        self.set_position(gtk.WIN_POS_CENTER)

        upper = gtk.Toolbar()
        upper.set_style(gtk.TOOLBAR_ICONS)

        newtb = gtk.ToolButton(gtk.STOCK_NEW)
        opentb = gtk.ToolButton(gtk.STOCK_OPEN)
        savetb = gtk.ToolButton(gtk.STOCK_SAVE)

        upper.insert(newtb, 0)
        upper.insert(opentb, 1)
        upper.insert(savetb, 2)

        lower = gtk.Toolbar()
        lower.set_style(gtk.TOOLBAR_ICONS)

        quittb = gtk.ToolButton(gtk.STOCK_QUIT)
        quittb.connect("clicked", gtk.main_quit)
        lower.insert(quittb, 0)
         
        vbox = gtk.VBox(False, 0)
        vbox.pack_start(upper, False, False, 0)
        vbox.pack_start(lower, False, False, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()
        
       
PyApp()
gtk.main()

تطبيقنا يعرض شريطى ادوات

 upper = gtk.Toolbar()
 ...
 lower = gtk.Toolbar()

هنا ننشئ شريطى الأدوات

 upper.insert(newtb, 0)
 ...
 lower.insert(quittb, 0)

كل منها له ازراره الخاصة

 vbox = gtk.VBox(False, 0)
 vbox.pack_start(upper, False, False, 0)
 vbox.pack_start(lower, False, False, 0)

يتم ضمهم فى صندوق افقى الواحد تلو الآخر


Toolbars

Figure: Toolbars



Undo redo

فى المثال التالى سنشرح كيفية عدم تفعيل ازرار فى شريط الأدوات، استخدام شائع فى التطبيقات الرسومية.. على سبيل المثال عدم تفعيل زر الحفظ save عندما نقوم بحفظ كل التغييرات على ملفنا فى القرص، هكذا يعلم المستخدم ان تم حفظ كل التغييرات

undoredo.py

#!/usr/bin/python

# ZetCode PyGTK tutorial 
#
# This example shows how to 
# activate/deactivate a ToolButton
#
# 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_title("Toolbar")
        self.set_size_request(250, 200)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
        self.set_position(gtk.WIN_POS_CENTER)
        
        self.count = 2

        toolbar = gtk.Toolbar()
        toolbar.set_style(gtk.TOOLBAR_ICONS)

        self.undo = gtk.ToolButton(gtk.STOCK_UNDO)
        self.redo = gtk.ToolButton(gtk.STOCK_REDO)
        sep = gtk.SeparatorToolItem()
        quit = gtk.ToolButton(gtk.STOCK_QUIT)

        toolbar.insert(self.undo, 0)
        toolbar.insert(self.redo, 1)
        toolbar.insert(sep, 2)
        toolbar.insert(quit, 3)
        
        self.undo.connect("clicked", self.on_undo)
        self.redo.connect("clicked", self.on_redo)
        quit.connect("clicked", gtk.main_quit)

        vbox = gtk.VBox(False, 2)
        vbox.pack_start(toolbar, False, False, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()
        
    def on_undo(self, widget):
        self.count = self.count - 1

        if self.count <= 0:
            self.undo.set_sensitive(False)
            self.redo.set_sensitive(True)


    def on_redo(self, widget):
        self.count = self.count + 1

        if self.count >= 5: 
            self.redo.set_sensitive(False)
            self.undo.set_sensitive(True)
       
PyApp()
gtk.main()

فى المثال لدينا زري undo, redo من ال stock .. وبعد مجموعة من الضغطات يتم الغاء تفعيلهم فيتحولو للون الرمادى

 self.count = 2

المتغيرself.count نستخدمه لتحديد اى الزرين هو المنشط او غير منشط

 self.undo = gtk.ToolButton(gtk.STOCK_UNDO)
 self.redo = gtk.ToolButton(gtk.STOCK_REDO)

لدينا زرين undo, redo انشئناهم والصور حصلنا عليها من ال stock

 self.undo.connect("clicked", self.on_undo)
 self.redo.connect("clicked", self.on_redo)

نربط الإشارة Clicked لكل منهما بمعالج الحدث المناسب له

 if self.count <= 0:
     self.undo.set_sensitive(False)
     self.redo.set_sensitive(True)

لتنشيط ويدجت نقوم بإسناد القيمة true للخاصية Sensitive و لعدم تنشيطه نسند قيمة false






Undo redo

Figure: Undo redo



فى هذه الجزئية شرحنا كيفية استخدام شريط الأدوات

Home ‡ Contents ‡ Top of Page