English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
المقدمة
بدأت الدروس العملي، نعم، جاء المعلم وقرأ بعض النقاط من شرائح العرض، ثم قال: ابدأ بالعمل......
ثم بدأت في طريق Python GUI، لم أكن قد تعرضت لاجهزة التدفق البصري لـ Python من قبل (على الرغم من أن هذا ليس صحيحًا)
لكن الآن، يبدو أن كتابة الأدوات الصغيرة سهلة جدًا، والذي بحثت عنه أولاً كان Tkinter لذا بدأت في الكتابة
لكن لاحقًا وجدت أن Qt رائعًا جدًا، لذا سأستخدم QT في التجربة القادمة. ثم عن Tkinter (python3.6)
كود الحاسبة ennn..... بعض الأسماء غير موحدة...
أولاً، يتم تحقيق مكتبة Stack في Python بشكل أساسي باستخدام list
pop() إزالة العنصر الأعلى، append() إضافة العنصر إلى أسفل
دعنا أولاً نلقي نظرة على المكونات الصغيرة الأساسية التي يقدمها Tkinter:
مكونات صغيرة | الوصف |
---|---|
Button | أزرار |
Canvas | الرسوم البيانية المنظمة، تستخدم لرسم الرسوم، إنشاء محرر رسومي وتحقيق مكونات صغيرة مخصصة |
Checkbutton | انقر على زر المربع المربع لتبديل القيم بينها |
Entry | حقل النص أو ما يُدعى به مربع النص |
Frame | المكونات (يمكن أن تحتوي على مكونات صغيرة أخرى) |
Label | عرض النصوص أو الصور |
Menu | عرض القائمة المنسدلة والقائمة المنبثقة في شريط القائمة |
Menubutton | أزرار القائمة في القائمة المنسدلة |
Message | مثل العلامة في عرض النص، لكنه يمكنه وضع النص تلقائيًا داخل عرض معين |
Radiobutton | أزرار اختيار |
Text | عرض النصوص الم格式ة، يدعم إدراج الصور والنصوص، ويسمح بعرض وتحرير النصوص باستخدام أنماط وخصائص مختلفة |
بدء إنشاء نافذة
أول ما يخطر ببالنا عند إنشاء شيء مرئي هو النافذة بالتأكيد
النافذة تحتوي على العديد من المكونات، مثل عنوان، أيقونة، حجم، الحدود، القائمة وما إلى ذلك.
import tkinter import os from tkinter import * class Calculator(object): """الحاسبة""" def __init__(self): self.tk=tkinter.Tk() # إنشاء self.tk.title('الحاسبة') self.tk.minsize(370,460) self.tk.maxsize(400,400) # يمكن أيضًا استخدام self.tk.resizable(0, 0) لمنع التوسع self.tk.iconbitmap(os.getcwd()+'/favicon.ico') def start(self): self.tk.mainloop() if __name__ == '__main__': NewCalculator=Calculator() NewCalculator.start()
هنا تم إنشاء نافذة أساسية، ولهذا الدور mainloop()
إذا قمنا بتعطيله، فإن النافذة ستختفي بسرعة، إنه لمنع هذه الحالة
# عرض اللوحة
بعد إتمام عمل الحاسبة يجب أن يكون أول شيء عرض النتيجة، هنا نحتاج إلى إنشاء لوحة عرض
بالطبع سنفكر أيضًا في إعداد خط عرض المحتوى، والأمثلة المحددة في الكود أدناه
.... import tkinter.font as tkfont .... # إعداد الخط self.EntryFont=tkfont.Font(self.tk,size=13) self.ButtonFont=tkfont.Font(self.tk,size=12) # عرض اللوحة self.count=tkinter.StringVar() self.count.set('0') self.label=tkinter.Label(self.tk,bg='#EEE9E9',bd='3',fg='black',anchor='center',font=self.EntryFont,textvariable=self.count) self.label.place(y=10,width=380,height=40) ....
في tkinter لوحة العلامة هناك بعض المعلمات، هنا ما تستخدمه أساسًا يمكن أن ي��ح الحاجة العادية
فيها bg لون الخلفية، fg لون الأمام، تغيير لون النص، anchor تحديد موقع النص في اللوحة، كما في الشكل التالي
اتجاه | مثال | جداول |
---|---|---|
nw | n | ne |
w | center | e |
sw | s | se |
بالنسبة للوحة والزر في النهاية، يمكن استخدام العديد من الطرق،place يمكن تحديد الموقع بدقة،أو يمكن استخدام pack(),grid()
place هو أفضل خيار للمدخل العددي، حيث يمكن تحديد موقع كل عنصر دقيقًا
يمكن أيضًا تعيين الخط مباشرة في Lable() بـ parameters،مثل font=("Arial,6")
textvariable يساوي "المراقبة"،التي يتم ربطها بـ string في tkinter،يمكن تغيير محتوى اللوحة بسهولة باستخدام طريقة set()
إعداد الزر،إعداد المدخل
الزر،parameters المدخل في الإدخال مشابهة
self.NumButton=tkinter.Button(master=self.tk,relief=GROOVE,bg='#EE6A50',text=self.ButtonList[0], font=self.ButtonFont,command=self.clear) self.NumButton.place(x=30,y=80,width=70,height=55) self.shiEntry=Entry(self.baoxianTk,validate='key',validatecommand=(self.checkNum,'%P'),font=self.EntryFont) self.shiEntry.place(x=190,y=80)
المشترك بينهما هو إعداد النمط الأساسي باستخدام parameters مثل bg، ولكن هنا يتم ربط الحدث بـ command، يشبه .click في JQ
في هذا السياق، يتم استخدام place أيضًا لتحديد الموقع بشكل دقيق، حيث يمثل relief نمط Button
relief=FLAT أو GROOVE أو RAISED أو RIDGE أو SOLID أو SUNKEN
من بينها حذف محتوى المدخل في الإدخال
text.delete(10) #حذف القيمة من الرقم 10 text.delete(10, 20) #حذف القيم من الرقم 10 إلى 20 text.insert(0, END) #حذف جميع القيم
قيود الإدخال
عند تصميم الوظائف، قد نحتاج إلى إدخال أرقام من قبل المستخدم، هنا يمكننا تقديم بعض القيود
في Parameter Button، يتم تحديد وقت تنفيذ function الم绑定 إلى validatecommand باستخدام %P للحصول على محتوى الإدخال في الوقت الحقيقي
عندما يتم تحديد خيار validate كـkey، يتم تمرير جميع العمليات المدخلة إلى Entry، في هذه الحالة يتم إدخال الطاقة البيضاء فقط
self.checkNum=self.baoxianTk.register(self.validateNum) self.gerenEntry=Entry(self.baoxianTk,validate='key',validatecommand=(self.checkNum,'%P'),font=self.EntryFont) self.gerenEntry.place(x=190,y=190) #تحقق من أن النص هو رقم def validateNum(self,content): if content.isdigit() and int(content)>=0 or content=="": return True else: return False
يمكن تعديل دالة validateNum() وفقًا للاحتياجات الخاصة بك
يمكن تعيين القيم التالية لخيار validate لـ validate选项
اسم | حدث |
---|---|
focus | تحقق عند الحصول أو فقدان Entry عنصر التركيز |
focusin | تحقق عند الحصول على Entry عنصر التركيز |
focusout | تحقق عند فقدان Entry عنصر التركيز |
key | تحقق عند تعديل حقل الإدخال |
all | تحقق من أي من هذه الحالات عند حدوثها |
تصميم الرموز الموسعة
أ增加了%,/،sqrt هذه الرموز في هذا الحاسبة الصغير
لتحقيق ذلك، أفكر في إضافة فحص قبل إضافة النص إلى لوحة المفاتيح
إذا كانت هذه العلامات الثلاثة، فتقوم بمعالجة المطلوبة
لاحظ أن يجب التحقق من أن الرقم متعدد الأرقام أو يحتوي على معادلة تحتوي على علامات
لا يمكن القيام بالتحويل مباشرة، بل يجب التحقق من عدد أرقام الرقم الذي تريد التحويل، طريقتي الخاصة كالتالي
def checkList(self): result=0 locate=-1 listSum=0 for length in range(0,len(self.inputlist)): if re.findall(r'[-+*/]',str(self.inputlist[length])): result=1 if length>locate: locate=length else: pass if result==1: for i in range(locate+1,len(self.inputlist)): listSum+=int(self.inputlist[i])*(10**(len(self.inputlist)-i-1)) else: for j in range(0,len(self.inputlist)): listSum+=int(self.inputlist[j])*(10**(len(self.inputlist)-j-1)) return listSum,locate #إضافة button def addButton(self,button): if button==self.ButtonList[18]: listSum,locate=self.checkList() if locate==-1: self.inputlist=[str(round(eval('1/'+str(listSum)),5))] else: for k in range(locate+1,len(self.inputlist)): del self.inputlist[k] self.inputlist.append(str(round(eval('1/'+str(listSum)),5))) elif button==self.ButtonList[19]: pass elif button==self.ButtonList[20]: pass else: self.inputlist.append(button) self.count.set(self.inputlist)
عن lambda
موسوعة بaidu: Lambda هي نوع خاص من تعريف الدوال في Python، يمكن استخدامها لتحديد دالة مجهولة
مختلف عن اللغات الأخرى، يمكن أن يكون جسم دالة Lambda في Python دالة واحدة فقط، وهي جملة تعبير عن العودة
بعد البحث عن المزيد من المقالات وفهم المزيد، يمكن القول إن Lambda هي دالة تعمل كـ “call back” للزر
إذا لم نستخدم Lambda للإرجاء في إعادة تفعيل الدالة، سيتم تنفيذ الدالة المربوطة في command عند إنشاء الزر
الفرق بين الكودين التاليين، الثاني يفعل دائمًا وظيفة knobDown عند إنشاءه
self.NumButton=tkinter.Button(master=self.tk,relief=GROOVE,bg='#BFEFFF',text=self.ButtonList[20], font=self.ButtonFont,command=lambda:self.knobDown(self.ButtonList[20])) self.NumButton=tkinter.Button(master=self.tk,relief=GROOVE,bg='#BFEFFF',text=self.ButtonList[20], font=self.ButtonFont,command=self.knobDown(self.ButtonList[20]))
للمزيد من التوضيح، يمكنك مراجعة المقالات الأخيرة في النهاية، كتب الأجداد
عن مربع الاختيار
كنت أريد تنفيذ التطبيق المقدم في PPT - توسيع حسابات القرض، ولكن تم تعطيل هذا المربع الاختياري بسبب مشكلة الأخطاء
الامثلة التالية مستخرجة من الإنترنت، ونسيت عنوان الموقع
هذا من خلال binding variable IntVar()، يمكن الحصول على قيمة value من Radiobutton باستخدام طريقة .get()
#!/usr/bin/env python import tkinter from tkinter import * import tkinter.font as tkfont root=tkinter.Tk() val=tkinter.IntVar() val.set(0) def func1(): if val.get() == 0: label.configure(text='radio 0') else: label.configure(text='radio 1') label = tkinter.Label(root, text='radio 0') label.pack() r0 = tkinter.Radiobutton(text = 'radio0', variable = val, value = 0) r0.pack() r1 = tkinter.Radiobutton(text = 'radio1', variable = val, value = 1) r1.pack() b = tkinter.Button(root, text='button', command=func1) b.pack() root.mainloop()
الباقة
C:\Users\bayi\Desktop\shiyan\progrem (venv) λ pip install pyinstaller C:\Users\bayi\Desktop\shiyan\progrem (venv) λ pyinstaller -F -w -i favicon.ico run.py
في البداية، بسبب إعداد الico الرمز في السطر الأول من الكود
يوجد مشكلة في التعرف على مسار الت打包 في نظام Windows، قم بتحويل الرمز إلى مكان قصير
قم بتعديل المسار إلى مسار مطلق لجعله يعمل (السطر الثاني في الكود أدناه، يجب أن تكون exe وico في نفس الدليل)
self.baoxianTk.icobitmap('favicon.ico') self.baoxianTk.iconbitmap(os.getcwd()+'/favicon.ico')
معاينة التأثير
على الرغم من أنني تعلمت على الفور واستفدت من المعرفة القديمة للآخرين، إلا أنني شعرت بالإنجاز بعد النجاح (وقد أكون متقيدًا بشكل كبير في متطلبات التصميم الجمالي......
اختيار الألوان والأنماط قد يستغرق وقتًا طويلاً، بما في ذلك واجهة المستخدم الأمامية للبرمجيات الذكية السابقة
الخلاصة
هذا هو محتوى المقال الكامل، نأمل أن يكون محتوى هذا المقال له قيمة مرجعية تعليمية أو مهنية بالنسبة إليكم، إذا كان لديكم أي أسئلة، يمكنكم ترك تعليقات للتفاعل، شكرًا لدعمكم لتعليمات النداء.
بيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع صاحب الحقوق بالملكية، ويتم جمع المحتوى من قبل المستخدمين عبر الإنترنت بطرقهم الخاصة، ولا يمتلك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا اكتشفت محتوى يشتبه في حقوق النسخ، فمرحبًا بمراسلتنا عبر البريد الإلكتروني: notice#oldtoolbag.com (يرجى استبدال #بـ @ عند إرسال البريد الإلكتروني) للإبلاغ، وقدم الدليل على الأدلة، وإذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم فورًا.