سوف نكمل فى هذا الجزء التعرف على بعض الأدوات الأساسية فى مكتبات WinForms.
يتيح لك زر الإختيار تحديد إختيار واحد من مجموعة إختيارات فى ازرار إختيار أخرى و الأداة GroupBox تستخدم لتجميع ازرار الإختيار مع بعضهم البعض.
radiobutton.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, StatusBar from System.Windows.Forms import RadioButton, GroupBox from System.Drawing import Size, Point class IForm(Form): def __init__(self): self.Text = "RadioButton" self.Size = Size(240, 240) gb = GroupBox() gb.Text = "Sex" gb.Size = Size(120, 110) gb.Location = Point(20, 20) gb.Parent = self male = RadioButton() male.Text = "Male" male.Parent = gb male.Location = Point(10, 30) male.CheckedChanged += self.OnChanged female = RadioButton() female.Text = "Female" female.Parent = gb female.Location = Point(10, 60) female.CheckedChanged += self.OnChanged self.statusbar = StatusBar() self.statusbar.Parent = self self.CenterToScreen() def OnChanged(self, sender, event): if sender.Checked: self.statusbar.Text = sender.Text Application.Run(IForm())
فى المثال عرضنا زرين إختيار داخل صندوق مجموعة و الممكن تحديد إختيار واحد فقط فى المرة الواحدة و نتيجة الإختيار سوف تظهر فى شريط الحالة.
gb = GroupBox() gb.Text = "Sex"
الأداة GroupBox تستخدم لجمع عدد من أزرار الإختيار معاً و بهذه الطريقة يمكننا إختيار زر واحد فقط فى المرة الواحدة.
male = RadioButton() male.Text = "Male" male.Parent = gb
تم إنشاء زر إختيار بالنص "Make".و الحاوى له هو صندوق التجميع.
def OnChanged(self, sender, event): if sender.Checked: self.statusbar.Text = sender.Text
الدالة OnChanged() تصع النص للزر الذى تم إختياره فى شريط الحالة.
Figure: RadioButton
فى المثال القادم سوف نتحدث عن الأداة MonthCalendar و هى تسمح للمستخدم بتحديد تاريخ معين فى شكل رسومى.
monthcalendar.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Windows.Forms import Label, MonthCalendar from System.Drawing import Size, Point class IForm(Form): def __init__(self): self.Text = 'MonthCalendar' self.Size = Size(240, 240) calendar = MonthCalendar() calendar.Parent = self calendar.Location = Point(20, 20) calendar.DateSelected += self.OnSelected self.date = Label() self.date.Location = Point(30, 180) self.date.Parent = self dt = calendar.SelectionStart self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year) self.CenterToScreen() def OnSelected(self, sender, event): dt = sender.SelectionStart self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year) Application.Run(IForm())
فى المثال عرضنا MonthCalendar و Label.
calendar = MonthCalendar() ... self.date = Label()
هناك أداتين تقويم شهرى و أداة عنوان MonthCalendar و Label و الأخيرة سوف يظهر فيها التاريخ المحدد.
def OnSelected(self, sender, event): dt = sender.SelectionStart self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year)
عند تحديد تاريخ معين من أداة التقويم الشهرى يتم استدعاء الدالة OnSelected() و الخاصية SelectionStart قيمتها هى التاريخ المحدد من أداة التقويم الشهرى.
Figure: MonthCalendar
أداة صندوق النص TextBox تستخدم لعرض أو استقبال نص و يمكن أن يكون النص فى سطر واحدة أو فى عدة سطور كما تستخدم لإخفاء كلمات المرور عند إدخالها.
textbox.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Windows.Forms import Label, TextBox from System.Drawing import Size, Point class IForm(Form): def __init__(self): self.Text = 'TextBox' self.text = Label() self.text.Parent = self self.text.Text = "..." self.text.AutoSize = True self.text.Location = Point(60, 40) tbox = TextBox() tbox.Parent = self tbox.Location = Point(60, 100) tbox.KeyUp += self.OnKeyUp self.Size = Size(250, 200) self.CenterToScreen() def OnKeyUp(self, sender, event): self.text.Text = sender.Text Application.Run(IForm())
يعرض المثال صندوق نص و أداة عنوان و بمجرد الكتابة فى صندوق النص تظهر الكتابة فى أداة العنوان laebl.
self.text = Label() ... self.text.AutoSize = True
تم إنشاء أداة العنوان Label و الخاصية AutoSize مفعله حتى تتمدد أداة العنوان لتظهر كامل النص.
tbox = TextBox() ... tbox.KeyUp += self.OnKeyUp
هنا ربطنا حدث KeyUp لصندوق النص لذلك عند الكتابه فى صندوق النص سوف يستدعى الدالة OnKeyUp().
def OnKeyUp(self, sender, event): self.text.Text = sender.Text
فى الدالة OnKeyUp() نقوم بتحديث النص فى أداة العنوان بالنص الذى تمت كتابته فى صندوق النص.
Figure: TextBox
صندوق الصورة PictureBox عبارة عن أداة تستخدم لعرض الثور على الناقذة.
picturebox.py #!/usr/bin/ipy import sys import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, PictureBox from System.Drawing import Size, Point, Bitmap class IForm(Form): def __init__(self): self.Text = 'PictureBox' try: castle = Bitmap('redrock.png') except Exception, e: print 'Cannot read image file' print e.msg sys.exit(1) pb = PictureBox() pb.Parent = self pb.Size = Size(castle.Width, castle.Height) pb.Location = Point(2, 2) pb.Image = castle self.Size = Size(castle.Width, castle.Height) self.CenterToScreen() Application.Run(IForm())
المثال يعرض صورة بإمتداد png على النافذة.
try: castle = Bitmap('redrock.png') except Exception, e: print 'Cannot read image file' print e.msg sys.exit(1)
مصدر الصورة هو مجلد العمل الذى به التطبيق.
pb = PictureBox() تم إنشاء أداة صندوق الصورة PictureBox.
pb.Image = castle هنا خاصية الImage تشير إلى الصورة التى أنشأناها.
self.Size = Size(castle.Width, castle.Height)هنا نجعل حجم الصورة يساوى حجم النافذة.
Figure: PictureBox
و بهذا نكون قد أنهبنا جزئية الأداوت الأساسية من الدرس.
‡ المحتويات‡