سنتابع فى هذه الجزئية تقديمنا لبعض اهم الويدجات فى PyGTK
هى ويدجت مسئولة عن ادخال سطر واحد نصى
entry.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example demonstrates the Entry 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("Entry") self.set_size_request(250, 200) self.set_position(gtk.WIN_POS_CENTER) fixed = gtk.Fixed() self.label = gtk.Label("...") fixed.put(self.label, 60, 40) entry = gtk.Entry() entry.add_events(gtk.gdk.KEY_RELEASE_MASK) fixed.put(entry, 60, 100) entry.connect("key-release-event", self.on_key_release) self.connect("destroy", gtk.main_quit) self.add(fixed) self.show_all() def on_key_release(self, widget, event): self.label.set_text(widget.get_text()) PyApp() gtk.main()
فى المثال نعرض حقل ادخال و label ، ويتم تحديث النص الظاهر على ال label بناءا على المدخلات فى حقل الإدخال
entry = gtk.Entry()انشاء الويدجت
entry.connect("key-release-event", self.on_key_release)اذا تغير الكتابة على الويدجت Entry نستدعى الطريقة on_key_release
def on_key_release(self, widget, event): self.label.set_text(widget.get_text())
نحصل على النص الذى تم ادخاله لحقل الإدخال ونضعه على ال label
Figure: Entry Widget
ال Hscale -منزلق افقى- هى ويدجت يسمح للمستخدم بإدخال قيمة عن طريق سحب سهم يشير لقيم فى فترة محددة، فى مثالنا نعرض اداة للتحكم فى الصوت
hscale.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example demonstrates the HScale widget # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import sys class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title("Scale") self.set_size_request(260, 150) self.set_position(gtk.WIN_POS_CENTER) scale = gtk.HScale() scale.set_range(0, 100) scale.set_increments(1, 10) scale.set_digits(0) scale.set_size_request(160, 35) scale.connect("value-changed", self.on_changed) self.load_pixbufs() self.image = gtk.Image() self.image.set_from_pixbuf(self.mutp) fix = gtk.Fixed() fix.put(scale, 20, 40) fix.put(self.image, 219, 50) self.add(fix) self.connect("destroy", lambda w: gtk.main_quit()) self.show_all() def load_pixbufs(self): try: self.mutp = gtk.gdk.pixbuf_new_from_file("mute.png") self.minp = gtk.gdk.pixbuf_new_from_file("min.png") self.medp = gtk.gdk.pixbuf_new_from_file("med.png") self.maxp = gtk.gdk.pixbuf_new_from_file("max.png") except Exception, e: print "Error reading Pixbufs" print e.message sys.exit(1) def on_changed(self, widget): val = widget.get_value() if val == 0: self.image.set_from_pixbuf(self.mutp) elif val > 0 and val <= 30: self.image.set_from_pixbuf(self.minp) elif val > 30 and val < 80: self.image.set_from_pixbuf(self.medp) else: self.image.set_from_pixbuf(self.maxp) PyApp() gtk.main()
فى المثال بالأعلى، لدينا منزلق افقى و صورة وبسحب المقياس يتم تغيير تلك الصورة بصورة ملائمة للقيمة المختارة
scale = gtk.HScale()انشاء المنزلق الأفقى
scale.set_range(0, 100)تحديد الحدود عليه من 0 الى 100
scale.set_increments(1, 10)الطريقة set_increments تحدد مقدار الزيادة ومساحة الصفحة للمدى
scale.set_digits(0)نريد اعداد صحيحة على المنزلق لذا نضع عدد الخانات ال decimal المطلوبة ل 0
if val == 0: self.image.set_from_pixbuf(self.mutp) elif val > 0 and val <= 30: self.image.set_from_pixbuf(self.minp) elif val > 30 and val < 80: self.image.set_from_pixbuf(self.medp) else: self.image.set_from_pixbuf(self.maxp)
نقوم بتغيير الصورة بناء على قيمة المنزلق
Figure: HScale Widget
نأتى لويدجت ToggleButton وهو مشابه كثيرا لصندوق الإختبار CheckBox وله حالتين ايضا مضغوط او غير مضغوط.. تستطيع التحويل بينهم بالضغط عليه.
togglebuttons.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example demonstrates the ToggleButton 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.color = [0, 0, 0] self.set_title("ToggleButtons") self.resize(350, 240) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) red = gtk.ToggleButton("Red") red.set_size_request(80, 35) red.connect("clicked", self.onred) green = gtk.ToggleButton("Green") green.set_size_request(80, 35) green.connect("clicked", self.ongreen) blue = gtk.ToggleButton("Blue") blue.set_size_request(80, 35) blue.connect("clicked", self.onblue) self.darea = gtk.DrawingArea() self.darea.set_size_request(150, 150) self.darea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("black")) fixed = gtk.Fixed() fixed.put(red, 30, 30) fixed.put(green, 30, 80) fixed.put(blue, 30, 130) fixed.put(self.darea, 150, 30) self.add(fixed) self.show_all() def onred(self, widget): if widget.get_active(): self.color[0] = 65535 else: self.color[0] = 0 self.darea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(self.color[0], self.color[1], self.color[2])) def ongreen(self, widget): if (widget.get_active()): self.color[1] = 65535 else: self.color[1] = 0 self.darea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(self.color[0], self.color[1], self.color[2])) def onblue(self, widget): if (widget.get_active()): self.color[2] = 65535 else: self.color[2] = 0 self.darea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(self.color[0], self.color[1], self.color[2])) PyApp() gtk.main()
فى مثالنا نعرض 3 toggle buttons ومساحة للرسم DrawingArea ، ونحدد الخلفية للأسود، وعند تغيير حالة اى زر يتم تحديد قيم الأحمر والأخضر والأزرق من قيمة اللون.. فيعتمد اللون على اى من الأزرار مضغوط
self.color = [0, 0, 0]هذه هى قيمة اللون اللذى سيتم تحديثه عبر ال toggle buttons
red = gtk.ToggleButton("Red") red.set_size_request(80, 35) red.connect("clicked", self.onred)
انشاء كان من الصف ToggleButton وحددنا المساحة الخاصة ب ل 80*35 بكسل، وكل زر له معالج ل – Clicked- الخاص به
self.darea = gtk.DrawingArea() self.darea.set_size_request(150, 150) self.darea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("black"))
ويدجت منطقة الرسم نستطيع استخدامه فى عرض لون مختلط بسبب الأزرار، نبدأ بعرض اللون الأسود
if widget.get_active(): self.color[0] = 65535 else: self.color[0] = 0
اذا ماتم الضغط عليه يتم تعديل قيم ال R وال G وال B
self.darea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(self.color[0], self.color[1], self.color[2]))
نحدث لون منطقة الرسم
Figure: ToggleButton widget
الويدجت الأخير هو Calendar يستخدم للتعامل مع التواريخ
calendar.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example demonstrates the Calendar 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("Calendar") self.set_size_request(300, 270) self.set_position(gtk.WIN_POS_CENTER) self.set_border_width(2) self.label = gtk.Label("...") calendar = gtk.Calendar() calendar.connect("day_selected", self.on_day_selected) fix = gtk.Fixed() fix.put(calendar, 20, 20) fix.put(self.label, 40, 230) self.add(fix) self.connect("destroy", gtk.main_quit) self.show_all() def on_day_selected(self, widget): (year, month, day) = widget.get_date() self.label.set_label(str(month) + "/" + str(day) + "/" + str(year)) PyApp() gtk.main()
لدينا ويدجت Calendar لنختار منه تاريخ ماو label لعرض ذلك التاريخ المختار
calendar = gtk.Calendar() انشاء الويدجت
(year, month, day) = widget.get_date() self.label.set_label(str(month) + "/" + str(day) + "/" + str(year))
فى الطريقة on_day_selected نحصل على التاريخ الحالى المختار وونقوم بتحديث محتوى ال label
Figure: Calendar
انهينا الحديث فى هذا الشابتر عن مجموعة مهمة من الويدجات
Home Contents Top of Page