import tkinter as tk
window = 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 axis
window.mainloop()ابزارهای اصلی (Widgets)
برچسب
برچسب یا Label برای نمایش متن در پنجره استفاده میشود. میتوان ظاهر آن مثل فونت، رنگ پسزمینه و رنگ متن را تغییر داد.
دکمه
دکمه یا Button برای انجام یک عمل هنگام کلیک کاربر استفاده میشود. با استفاده از پارامتر command میتوان یک تابع را به دکمه متصل کرد.
import tkinter as tk
def 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 tk
def 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 برای انتخاب یکی از چند گزینه استفاده میشود. همهی رادیوباتنهایی که یک متغیر مشترک دارند بهصورت خودکار وابسته به هم میشوند (انتخاب یکی، بقیه را غیرفعال میکند).
import tkinter as tk
def btn_print():
result.configure(text=f"You selected: {gender.get()}")
window = tk.Tk()
window.title("Hello World!")
window.geometry("480x360")
gender = tk.StringVar(value="male") # shared variable
tk.Radiobutton(
window, text="Male", variable=gender, value="male"
).pack()
tk.Radiobutton(
window, text="Female", variable=gender, value="female"
).pack()
btn = tk.Button(window, text="Submit", command=btn_print)
btn.pack(pady=10)
result = tk.Label(window, text="")
result.pack(pady=10)
window.mainloop()چکباکس
ویجت Checkbutton برای انتخاب گزینههایی استفاده میشود که میتوانند بهصورت مستقل (چندتایی) انتخاب یا غیرفعال شوند. با متغیر IntVar مقدار ۰ یا ۱ (تیکنخورده / تیکخورده) نگهداری میشود.
import tkinter as tk
def btn_print():
if agree.get() == 1:
result.configure(text="You agreed!", fg="green")
else:
result.configure(text="You must agree first!", fg="red")
window = tk.Tk()
window.title("Hello World!")
window.geometry("480x360")
agree = tk.IntVar() # 0 = unchecked, 1 = checked
chk = tk.Checkbutton(window, text="I agree to the terms", variable=agree)
chk.pack(pady=10)
btn = tk.Button(window, text="Submit", command=btn_print)
btn.pack()
result = tk.Label(window, text="")
result.pack(pady=10)
window.mainloop()لیستباکس
ویجت Listbox برای نمایش یک لیست از آیتمها و انتخاب یک یا چند مورد از بین آنها استفاده میشود. با متد curselection() اندیس آیتم انتخابشده و با get() مقدار آن خوانده میشود.
import tkinter as tk
def btn_print():
selection = lst.curselection() # returns a tuple of indexes
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:
lst.insert(tk.END, fruit) # add item to the end of the list
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 جهت افقی یا عمودی آن مشخص میشود.
import tkinter as tk
def slider_changed(value):
result.configure(text=f"Value: {value}")
window = tk.Tk()
window.title("Hello World!")
window.geometry("480x360")
scale = tk.Scale(
window,
from_=0,
to=100,
orient="horizontal", # or "vertical"
command=slider_changed,
)
scale.pack(pady=10)
result = tk.Label(window, text="Value: 0")
result.pack(pady=10)
window.mainloop()قاب (Frame)
ویجت Frame یک ظرف (container) خالی است که برای دستهبندی و سازماندهی سایر ویجتها داخل پنجره استفاده میشود. مثلاً میتوان چند ویجت را در یک قاب کنار هم و چند ویجت دیگر را در قاب دیگری زیر هم چید.
import tkinter as tk
window = tk.Tk()
window.title("Hello World!")
window.geometry("480x360")
top_frame = tk.Frame(window)
top_frame.pack(pady=10)
tk.Label(top_frame, text="Name:").pack(side="left", padx=5)
tk.Entry(top_frame).pack(side="left")
bottom_frame = tk.Frame(window)
bottom_frame.pack(pady=10)
tk.Button(bottom_frame, text="OK").pack(side="left", padx=5)
tk.Button(bottom_frame, text="Cancel").pack(side="left", padx=5)
window.mainloop()جعبه پیام
ماژول messagebox برای نمایش پیامهای هشدار، خطا یا سوال بهصورت یک پنجرهی جداگانه (Popup) استفاده میشود.
import tkinter as tk
from tkinter import messagebox
def btn_print():
answer = messagebox.askyesno("Confirm", "Are you sure?")
if answer:
messagebox.showinfo("Result", "You clicked Yes!")
else:
messagebox.showwarning("Result", "You clicked No!")
window = tk.Tk()
window.title("Hello World!")
window.geometry("480x360")
btn = tk.Button(window, text="Click me", command=btn_print)
btn.pack(pady=20)
window.mainloop()متن چندخطی
ویجت Text برای دریافت یا نمایش چند خط متن استفاده میشود (برخلاف Entry که فقط یک خط است). با متد get("1.0", tk.END) تمام متن از خط اول تا انتها خوانده میشود.
import tkinter as tk
def btn_print():
content = txt.get("1.0", tk.END) # from line 1, char 0 to the 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()