فى هذه الجزئية سنتحدث على القوائم
شريط القوائم احد اوضح الأجزاء فى واجهة التطبيق، هو مجموعة من الأوامر المرتبطة موجودة فى قوائم. فى تطبيق الكونسول كنت تحتاج لتذكر كل هذه الأوامر، ولكن هنا نجدها مجمعة فى اماكن منطقية
فى المثال الأول، سننشئ شريط قوائم وبقائمة file والتى تحوى بدورها على عنصر واحد عند اختياره يتم غلق التطبيق
simplemenu.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows a simple menu # # 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("Simple menu") 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) mb = gtk.MenuBar() filemenu = gtk.Menu() filem = gtk.MenuItem("File") filem.set_submenu(filemenu) exit = gtk.MenuItem("Exit") exit.connect("activate", gtk.main_quit) filemenu.append(exit) mb.append(filem) vbox = gtk.VBox(False, 2) vbox.pack_start(mb, False, False, 0) self.add(vbox) self.connect("destroy", gtk.main_quit) self.show_all() PyApp() gtk.main()
مثال بسيط على وظائف شريط الأدوات
mb = gtk.MenuBar()انشاء الشريط
filemenu = gtk.Menu() filem = gtk.MenuItem("File") filem.set_submenu(filemenu)
انشاء العنصر العلوى filem اللذى سيحوى قائمة filemenu
exit = gtk.MenuItem("Exit") exit.connect("activate", gtk.main_quit) filemenu.append(exit)
انشاء العنصر exit واضافته للfilemenu
mb.append(filem)اضافة العنصر العلوى لشريط القوائم
vbox = gtk.VBox(False, 2) vbox.pack_start(mb, False, False, 0)
بعكس الtoolkits الأخرى، يجب علينا الإهتمام بإدارة المخططات بنفسنا، فنضع شريط القوائم فى صندوق رأسى
Figure: Simple menu
فى المثال التالى، سنستكشف القوائم اكثر.. سنضيف صورا ومسرعات -اختصارات- لعناصر القائمة
imagemenu.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows a menu with # images, accelerators and a separator # # 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("Image menu") 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) mb = gtk.MenuBar() filemenu = gtk.Menu() filem = gtk.MenuItem("_File") filem.set_submenu(filemenu) agr = gtk.AccelGroup() self.add_accel_group(agr) newi = gtk.ImageMenuItem(gtk.STOCK_NEW, agr) key, mod = gtk.accelerator_parse("N") newi.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE) filemenu.append(newi) openm = gtk.ImageMenuItem(gtk.STOCK_OPEN, agr) key, mod = gtk.accelerator_parse("O") openm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE) filemenu.append(openm) sep = gtk.SeparatorMenuItem() filemenu.append(sep) exit = gtk.ImageMenuItem(gtk.STOCK_QUIT, agr) key, mod = gtk.accelerator_parse("Q") exit.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE) exit.connect("activate", gtk.main_quit) filemenu.append(exit) mb.append(filem) vbox = gtk.VBox(False, 2) vbox.pack_start(mb, False, False, 0) self.add(vbox) self.connect("destroy", gtk.main_quit) self.show_all() PyApp() gtk.main()
مثالنا يعرض قائمة علوية تحوى 3 عناصر فرعية كل منها له صورة ومسرع، المسرع لعنصر quit مفعل
agr = gtk.AccelGroup() self.add_accel_group(agr)
للعمل مع المسرعات.. ننشئ كائن عام من الصف AccelGroup.. سنستخدمه لاحقا
newi = gtk.ImageMenuItem(gtk.STOCK_NEW, agr)انشاء العنصر، والصورة تأتى من ال Stock وهى صورة ملف جديد
key, mod = gtk.accelerator_parse("N")الطريقة gtk.accelerator_parse تعالج المسرع المحدد وتعيد قيمة المفتاح والقناع
The gtk.accelerator_parse() function parses the specified accelerator string and returns a 2-tuple containing the keyval and modifier mask corresponding to accelerator.
newi.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
هذا ينشئ مسرع -اختصار- من الزرين كنترول و Q للعنصر exit
sep = gtk.SeparatorMenuItem() filemenu.append(sep)
السابق ينشئ عنصر فاصل، ليتم تقسيم العناصر لمجموعات منطقية
Figure: Image menu
يستخدم فى اضافة عنصر قابل للتنشيط، يستخدم للقيم المنطقية كال CheckButton
checkmenuitem.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows how to # use a CheckMenuItem # # 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("Check menu item") 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) mb = gtk.MenuBar() filemenu = gtk.Menu() filem = gtk.MenuItem("File") filem.set_submenu(filemenu) viewmenu = gtk.Menu() view = gtk.MenuItem("View") view.set_submenu(viewmenu) stat = gtk.CheckMenuItem("View Statusbar") stat.set_active(True) stat.connect("activate", self.on_status_view) viewmenu.append(stat) exit = gtk.MenuItem("Exit") exit.connect("activate", gtk.main_quit) filemenu.append(exit) mb.append(filem) mb.append(view) self.statusbar = gtk.Statusbar() self.statusbar.push(1, "Ready") vbox = gtk.VBox(False, 2) vbox.pack_start(mb, False, False, 0) vbox.pack_start(gtk.Label(), True, False, 0) vbox.pack_start(self.statusbar, False, False, 0) self.add(vbox) self.connect("destroy", gtk.main_quit) self.show_all() def on_status_view(self, widget): if widget.active: self.statusbar.show() else: self.statusbar.hide() PyApp() gtk.main()
فى مثالنا نعرض عنصر قابل للتنشيط ، وفى حال تنشيطه سيتم اظهار شريط الحالة وإلا سيكون مخفى
stat = gtk.CheckMenuItem("View Statusbar")انشاء الكائن
stat.set_active(True)الطريقة set_active تحدد حالة التنشيط للعنصر
if widget.active: self.statusbar.show() else: self.statusbar.hide()
بناءا على حالة العنصر يتم تحديد حالة شريط الحالة
Figure: CheckMenuItem
فى مثالنا الأخير سنتعرض لكيفية انشاء قائمة فرعية
submenu.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows a submenu # # 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("Submenu") 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) mb = gtk.MenuBar() filemenu = gtk.Menu() filem = gtk.MenuItem("File") filem.set_submenu(filemenu) mb.append(filem) imenu = gtk.Menu() importm = gtk.MenuItem("Import") importm.set_submenu(imenu) inews = gtk.MenuItem("Import news feed...") ibookmarks = gtk.MenuItem("Import bookmarks...") imail = gtk.MenuItem("Import mail...") imenu.append(inews) imenu.append(ibookmarks) imenu.append(imail) filemenu.append(importm) exit = gtk.MenuItem("Exit") exit.connect("activate", gtk.main_quit) filemenu.append(exit) vbox = gtk.VBox(False, 2) vbox.pack_start(mb, False, False, 0) self.add(vbox) self.connect("destroy", gtk.main_quit) self.show_all() PyApp() gtk.main()
انشاء القائمة الفرعية
imenu = gtk.Menu()القائمة الفرعية هى قائمة لذا تنشئ من الصف Menu
importm = gtk.MenuItem("Import") importm.set_submenu(imenu)
وتكون هى القائمة الفرعية لعنصر ما، فنستطيع تحديد ذلك من الخاصية Submenu
inews = gtk.MenuItem("Import news feed...") ibookmarks = gtk.MenuItem("Import bookmarks...") imail = gtk.MenuItem("Import mail...") imenu.append(inews) imenu.append(ibookmarks) imenu.append(imail)
للقائمة الفرعية مجموعة من العناصر داخلها
Figure: Submenu
فى هذه الجزئية تعرضنا لإنشاء القوائم والتعامل معها فى PyGTK
Home Contents Top of Page