إنشاء نافذة مُحاورة وكيفية إظهارها

أهلا وسهلا بكم من جديد.
أسعد الله أوقاتكم بذكر الله.
سنتحدث في الأسطر التالية عن نوافذ المحاورة،
عزيزي القارئ: نوافذ المحاورة لا تختلف كثيرا عن النوافذ الرئيسية أو الفرعية للبرامج، وتتشابه كثيرا مع إنشاء الإطار ووضع الكائنات عليه،
ولكنها نوافذ تنبثق حال وقوع حدث ما، أو طلب بيانات معينة من المستخدم، 
وتُستخدم أيضا في عمل محاورة إعدادات البرنامج، وأشياء أخرى.
وتتميز هذه المحاورات بأنها توقف دالة معينة إيقاف مؤقت حتى تحصل على البيانات من المستخدم ثم تكمل عملها، أيضا فإننا نقوم بتدميرها نهائيا بعد الانتهاء من استخدامِها.
ونقوم بتنشيطها عن طريق الضغط على زر ما أو عنصر في قائمة السياق أو شريط القوائم، وذلك بوضع هذا الكود في دالة الحدث الخاصة بهذا العنصر:
اسم كلاس المحاورة(self).ShowModal() 
فإن كانت هذه المحاورة خاصة بالإعدادات مثلا واسمها setting يكون الكود هكذا:
setting(self).ShowModal()
تابِعوا النموذج التالي لمعرفة الموضوع أكثر.

نموذج على نوافذ المُحاورة:

import wx from datetime import datetime #نموذج إنشاء منبه. class Alert(wx.Frame): def __init__(self): super(Alert,self).__init__(None,-1, title= 'المُنبِّه') p = wx.Panel(self,-1) wx.StaticText(p,-1, "قائمة التنبيهات") Alert.lb= wx.ListBox(p, -1) wx.Button(p,10,'إنشاء تنبيه جديد') self.Bind(wx.EVT_BUTTON, lambda event: dlg(self).ShowModal(), id=10) self.Show() #محاورة إضافة تنبيه جديد class dlg(wx.Dialog): def __init__(self, parent, style= wx.DEFAULT_DIALOG_STYLE): wx.Dialog.__init__(self, parent, title="إضافة تنبيه جديد") time = datetime.now() #الحصول على الوقت الحالي. h = time.hour if h >= 13: h -= 12 elif h == 0: h = 12 #تحويل الساعات من 24 إلى 12 wx.StaticText(self,-1,"اسم التنبيه:") self.tc=wx.TextCtrl(self, -1) #مربع كتابة لكتابة اسم التنبيه. wx.StaticText(self,-1,"الساعات:") self.hour = wx.SpinCtrl(self, -1, min=1, max=12, initial=h) wx.StaticText(self,-1, "الدقائق:") self.minute = wx.SpinCtrl(self, -1, min=0, max=59, initial=time.minute) self.am_bm = wx.RadioBox(self, -1, choices=["صباحا", "مساءً"]) self.am_bm.Selection = 0 wx.StaticText(self,-1,"اختيار اليوم:") self.day = wx.Choice(self, -1, choices=["الاثنين", "الثُلاثاء", "الأربِعاء", "الخميس", "الجُمُعة", "السبت", "الأحد"]) self.day.Selection=datetime.now().weekday() wx.Button(self, 1, 'حفظ') self.Bind(wx.EVT_BUTTON, self.add, id=1) wx.Button(self, wx.ID_CANCEL, label='إلغاء') #ما سيتم فعله عند الضغط على زر الحفظ: def add(self, event): #الحصول على قيمة مربع التحرير والمربعات الأخرى. Name=f"{self.tc.Value} {self.hour.Value}: {self.minute.Value} {self.am_bm.StringSelection}, يوم {self.day.StringSelection}" h=self.hour.Value m=self.minute.Value t=self.am_bm.Selection day=self.day.Selection if t == 1 and h != 12: h += 12 elif t == 0 and h == 12: h = 0 Time =f"{h}:{m}:{day}" Alert.lb.Append(Name) #تدمير المحاورة. self.Destroy() Alert.lb.SetFocus() #نقل التركيز إلى القائمة. app= wx.App() Alert() app.MainLoop()

تعليقات