برچسب یا Label برای نمایش متن در پنجره استفاده میشود. میتوان ظاهر آن مثل فونت، رنگ پسزمینه و رنگ متن را تغییر داد.
import tkinter as tkwindow = tk.Tk()window.title("Hello World!")window.geometry("480x360")tk.Label(window, text="Hello Mohsen").pack()tk.Label( window, text="How are you?", font=("Roboto", 18), # family size bg="blue", # background fg="white", # forground).pack(pady=10) # padding in y axiswindow.mainloop()
دکمه
دکمه یا Button برای انجام یک عمل هنگام کلیک کاربر استفاده میشود. با استفاده از پارامتر command میتوان یک تابع را به دکمه متصل کرد.
import tkinter as tkdef btn_print():print("Print in Terminal!") lbl.configure(text="Print in Tkinter GUI")window = tk.Tk()window.title("Hello World!")window.geometry("480x360")btn = tk.Button(window)btn.configure(text="Say hello", command=btn_print)btn.pack(pady=10)lbl = tk.Label(window, text="")lbl.pack(pady=10)window.mainloop()
ورودی
ویجت Entry برای دریافت ورودی از کاربر استفاده میشود. با متد get() میتوان مقدار واردشده را خواند و بر اساس آن تصمیمگیری کرد.
import tkinter as tkdef btn_print(): name = ntr.get()if name =="": result.configure( text="Please Enter your name!", fg="red" )else: result.configure( text=f"Hello {name}!", fg="blue" )window = tk.Tk()window.title("Hello World!")window.geometry("480x360")lbl = tk.Label( window, text="Enter your name:", font=("Roboto", 10))lbl.pack(pady=10)ntr = tk.Entry(window)ntr.pack(pady=5)btn = tk.Button(window)btn.configure(text="Say hello", command=btn_print)btn.pack()result = tk.Label( window, text="", font=("Roboto", 12, "bold"))result.pack(pady=10)window.mainloop()
دکمه رادیویی
ویجت Radiobutton برای انتخاب یکی از چند گزینه استفاده میشود. همهی رادیوباتنهایی که یک متغیر مشترک دارند بهصورت خودکار وابسته به هم میشوند (انتخاب یکی، بقیه را غیرفعال میکند).
ویجت Checkbutton برای انتخاب گزینههایی استفاده میشود که میتوانند بهصورت مستقل (چندتایی) انتخاب یا غیرفعال شوند. با متغیر IntVar مقدار ۰ یا ۱ (تیکنخورده / تیکخورده) نگهداری میشود.
ویجت Listbox برای نمایش یک لیست از آیتمها و انتخاب یک یا چند مورد از بین آنها استفاده میشود. با متد curselection() اندیس آیتم انتخابشده و با get() مقدار آن خوانده میشود.
import tkinter as tkdef btn_print():# returns a tuple of indexes selection = lst.curselection()if selection: index = selection[0] result.configure( text=f"You selected: {lst.get(index)}" )window = tk.Tk()window.title("Hello World!")window.geometry("480x360")lst = tk.Listbox(window)lst.pack(pady=10)fruits = ["Apple", "Banana","Cherry", "Melon",]for fruit in fruits:# add item to the end of the list lst.insert(tk.END, fruit)btn = tk.Button( window, text="Select", command=btn_print,)btn.pack()result = tk.Label(window, text="")result.pack(pady=10)window.mainloop()
اسلایدر
ویجت Scale یک نوار لغزنده برای انتخاب یک عدد در یک بازهی مشخص است. با پارامترهای from_ و to بازه و با orient جهت افقی یا عمودی آن مشخص میشود.
ویجت Frame یک ظرف (container) خالی است که برای دستهبندی و سازماندهی سایر ویجتها داخل پنجره استفاده میشود. مثلاً میتوان چند ویجت را در یک قاب کنار هم و چند ویجت دیگر را در قاب دیگری زیر هم چید.
ویجت Text برای دریافت یا نمایش چند خط متن استفاده میشود (برخلاف Entry که فقط یک خط است). با متد get("1.0", tk.END) تمام متن از خط اول تا انتها خوانده میشود.
import tkinter as tkdef btn_print():# from line 1, char 0 to the end content = txt.get("1.0", tk.END)print(content)window = tk.Tk()window.title("Hello World!")window.geometry("480x360")txt = tk.Text( window, height=8, width=40,)txt.pack(pady=10)btn = tk.Button( window, text="Print", command=btn_print,)btn.pack()window.mainloop()
تمرین
احتیاطگوسفند شمار
دینا کوچولو که خوابش نمیبره مادرش بهش یاد داده قبل خواب توی ذهنش گوسفندهایی رو تصور کنه که از روی نرده رد میشن و سعی کنه تعداد اونهارو بشماره تا ذهنش خسته بشه بخوابه. اما دینا که تازه برنامه نویسی یاد گرفته بود به فکر این بود که چطور یک نرم افزار گوسفند شمار بسازه. دینا رو برای ساخت این نرم افزار راهنمایی کنید.
کد
from tkinter import*counter =0def btn_counter():global counter counter +=1 lbl.configure(text=f"{counter} x 🐑.")window = Tk()window.title("Sheep counter")window.geometry("480x360")btn = Button(window)btn.configure(text="count", command=btn_counter)btn.pack(pady=10)lbl = Label(window, text="0 x 🐑.")lbl.pack(pady=10)window.mainloop()