هناك العديد من الخيارات لبرمجة واجهات المستخدم الرسومية بإستخدام بايثون ولكن من بين أسهل الخيارات هناك Tk لأنها مكتبة قياسية وهذا يعني أنها تأتي مع بايثون و أصبحت مؤخرا تحتوي على الكثير من widgets و تحسين المظهر القبيح التي كانت تمتاز به .
هذا الدليل موجه إلى المبرمجون المعتادون على بايثون و لكن لا خبرة لهم في التطبيقات الرسومية كما لدي هدفين من وراء هذا الدليل وهما : إثبات ان برمجة الواجهات الرسومية ليست صعبة أو مستحيلة كما يظن أغلب المبرمجون وسنقدم أمثلة عن ذلك اما الهدف الثاني أريد التعريف بهذه المكتبة والتي توفر حاجيات لا تحصى لبرمجة برنامج رسومي عالي الجودة .
سنستخدم بايثون 3 في هذا الدليل حتى نشجع الناس على الإنتقال إلى هذه النسخة المحسنة والمطورة من بايثون كما أنوه إلى مستخدمي الويندوز أن مكتبة Tk تأتي مع بايثون إفتراضيا أما أنظمة لينكس فهناك بعض النسخ بحاجة إلى تثبيت منفصل لذلك إرجع إلى وثائق بايثون الخاص بنظامك
.
أهم widget و مهامها :
Frame : تستخدم لإحتواء widgets وإضافة الحدود
Label: عرض الصور أو النصوص
Button : أزرار قياسيىة لأستدعاء وظائف عند الضغط عليها
Checkbutton : خانة الاختيار لتبديل قيمة (يمكن أن يكون رد على نقرة)
Radiobutton : أزرار الإختيار القياسية
Entry : نص مدخل في سطر واحد
Text:نص مدخل في سطور متعددة
Combobox : قائمة منسدلة للإختيار
Listbox : قائمة لإختيار سطور متعددة
Scrollbar : أفقي أو عمودي
Sizegrip : إضافة مثلث في الزاوية اليمنى السفلية لتسهيل عملية تحريك وتضغير أو تكبير النافذة
Scale : سلم متحرك للنقر وجره مع الفأر
Notebook : للمحتويات التفاعلية
Canvas : لرسم رسومات مثل الخطوط والدوائر والأقواس، والأشكال البيضاوية، والمستطيلات
Menu : شريط العناوين في أعلى النافذة
نوافذ الحوار المنبثقة
askquestion : لطرح أسئلة تكون إجابتها نعم أولا
askyesno : طرح أسئلة نعم أولا
askyesnocancel : طرح أسئلة بنعم أولا أو إلغاء
showinfo : عرض نافذة منبثقة مع نص و أيقونة أخبار
shwowarning : عرض نافذة منبثقة مع نص و أيقونة تحذير
showerror : عرض نافذة منبثقة مع نص و أيقونة خطأ
Filedialog : السماح للمستخدم من إختيار ملف من ملفات النظام
النافذة الرئيسية
from tkinter import Tk root = Tk () root.mainloop()
إضافة أيقونة و عنوان للنافذة
# تعيين أيقونة وعنوان النافذة import sys from tkinter import Tk, PhotoImage root = Tk() root.iconphoto(root, PhotoImage(file=sys.argv[1])) root.title("Tkinter Test") root.mainloop()
الحصول على حجم الشاشة
# الحصول على حجم الشاشة from tkinter import Tk root = Tk() screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() print("Screen width:", screen_width) print("Screen height:", screen_height)
جعل النافذة نافذة كبيرة
from tkinter import Tk root = Tk () root.attributes('-fullscreen', True ) root.mainloop()
تعيين موقع وحجم النافذة
from tkinter import Tk root = Tk() root.geometry("300x150+50+50") root.mainloop()
عرض نص على النافذة
from tkinter import Tk , Label root = Tk () my_text = Label (root, text='Hello, world!') my_text.pack() root.mainloop()
تغيير الخط
from tkinter import Tk , Message root = Tk () msg = Message (root, text='Hello, world!') # Font is a tuple of (font _family , size _in _points , style _modifier _string ) msg.config(font=('times', 48, 'italic bold underline')) msg.pack() root.mainloop()
عرض صورة
import sys from tkinter import Tk , Label , PhotoImage root = Tk () img = PhotoImage (file=sys.argv[1]) my_image = Label (root, image=img) my_image.pack() root.mainloop()
شريط العنوان
from tkinter import Tk, Menu root = Tk() main_menu = Menu(root, tearoff=0) main_menu.add_command(label="Quit", command=root.destroy) root.config(menu=main_menu) root.mainloop()
شريط عنوان مع قائمة منسدلة
from tkinter import Tk, Menu root = Tk() menu_bar = Menu(root) file_menu = Menu(menu_bar, tearoff=0) file_menu.add_command(label="Quit!", command=root.destroy) file_menu.add_command(label="Exit!", command=root.destroy) file_menu.add_command(label="End!", command=root.destroy) # Add the "File" drop down sub-menu in the main menu bar menu_bar.add_cascade(label="File", menu=file_menu) root.config(menu=menu_bar) root.mainloop()
نافذة حوار منبثقة
from tkinter import messagebox dialog_title = 'Please answer' dialog_text = 'Do you like bacon?' answer = messagebox.askquestion(dialog_title, dialog_text) if answer == 'yes': print('I like bacon too!') else: # 'no' print('You must have clicked the wrong button by accident.')