1. Checkbox (Checkbutton
)
Checkbox là một nút vuông có thể được đánh dấu hoặc bỏ dấu. Nó hữu ích khi cần cung cấp cho người dùng lựa chọn một hoặc nhiều tùy chọn từ danh sách.
Tạo checkbox
Để tạo checkbox, sử dụng widget Checkbutton
. Để theo dõi trạng thái của checkbox (được kích hoạt hay không), thường sử dụng một biến kiểu IntVar
, lưu giá trị 1
nếu checkbox được đánh dấu và 0
nếu không.
import tkinter as tk
# Hàm kiểm tra trạng thái checkbox
def show_status():
print("Bật" if var.get() == 1 else "Tắt")
# Tạo cửa sổ
root = tk.Tk()
root.title("Ví dụ với checkbox")
# Biến để lưu trạng thái
var = tk.IntVar()
# Checkbox liên kết với biến var
checkbox = tk.Checkbutton(root, text="Bật tùy chọn", variable=var, command=show_status)
checkbox.pack(pady=20)
root.mainloop()
Giải thích mã
-
variable=var
: Liên kết checkbox với biếnvar
, biến này sẽ được cập nhật mỗi khi trạng thái của checkbox thay đổi. -
Hàm
show_status()
: Hiển thị trạng thái hiện tại của checkbox trong console. Nếu checkbox được đánh dấu, hiển thị "Bật", nếu không thì "Tắt".
Sử dụng nhiều checkbox
Nếu bạn cần nhiều tùy chọn độc lập, bạn có thể tạo nhiều checkbox, mỗi cái liên kết với một biến riêng.
# Biến để lưu trạng thái
option1 = tk.IntVar()
option2 = tk.IntVar()
# Checkbox
check1 = tk.Checkbutton(root, text="Tùy chọn 1", variable=option1)
check2 = tk.Checkbutton(root, text="Tùy chọn 2", variable=option2)
check1.pack()
check2.pack()
2. Radiobutton (Radiobutton
)
Radiobutton là tập hợp các nút tròn, trong đó người dùng chỉ có thể chọn một. Nó hữu ích khi cần cung cấp cho người dùng một lựa chọn duy nhất từ nhiều tùy chọn.
Tạo radiobutton
Để tạo radiobutton, sử dụng widget Radiobutton
. Để liên kết các radiobutton và làm cho chúng liên quan với nhau, tất cả phải được liên kết với cùng một biến (IntVar
hoặc StringVar
).
# Hàm hiển thị lựa chọn
def show_choice():
print(f"Lựa chọn: {choice.get()}")
# Biến theo dõi lựa chọn
choice = tk.IntVar()
# Radiobutton
radio1 = tk.Radiobutton(root, text="Lựa chọn 1", variable=choice, value=1, command=show_choice)
radio2 = tk.Radiobutton(root, text="Lựa chọn 2", variable=choice, value=2, command=show_choice)
radio3 = tk.Radiobutton(root, text="Lựa chọn 3", variable=choice, value=3, command=show_choice)
radio1.pack()
radio2.pack()
radio3.pack()
Giải thích mã
-
variable=choice
: Liên kết tất cả radiobutton với cùng một biếnchoice
để làm cho chúng liên quan với nhau. -
value
: Xác định giá trị mà biếnchoice
sẽ nhận nếu người dùng chọn radiobutton đó. -
Hàm
show_choice()
: Hiển thị trong console tùy chọn đã được chọn.
Radiobutton với giá trị văn bản
Bạn cũng có thể liên kết radiobutton với biến kiểu StringVar
để sử dụng giá trị văn bản.
# Biến để lưu lựa chọn văn bản
color_choice = tk.StringVar()
# Radiobutton với giá trị văn bản
radio_red = tk.Radiobutton(root, text="Đỏ", variable=color_choice, value="Red")
radio_blue = tk.Radiobutton(root, text="Xanh Dương", variable=color_choice, value="Blue")
radio_green = tk.Radiobutton(root, text="Xanh Lá", variable=color_choice, value="Green")
radio_red.pack()
radio_blue.pack()
radio_green.pack()
3. Spinbox (Spinbox
)
Spinbox cho phép người dùng chọn số từ một phạm vi. Widget này hữu ích để nhập dữ liệu số như tuổi hoặc số lượng.
Tạo Spinbox
Trong Tkinter, Spinbox được tạo bằng widget Spinbox
, cho phép người dùng nhập giá trị thủ công hoặc chọn nó bằng mũi tên.
# Hàm hiển thị giá trị được chọn
def show_spin_value():
print(f"Giá trị: {spin.get()}")
# Spinbox từ 1 tới 10
spin = tk.Spinbox(root, from_=1, to=10, command=show_spin_value)
spin.pack(pady=20)
Giải thích mã
from_
vàto
: Xác định phạm vi giá trị cho spinbox.- Hàm
show_spin_value()
: Hiển thị giá trị đã chọn trong console mỗi khi thay đổi.
Cấu hình bước nhảy và giá trị
Tham số increment
cho phép đặt bước nhảy cho spinbox, và values
cho phép chỉ định các giá trị cụ thể.
# Spinbox bước nhảy là 2
spin_step = tk.Spinbox(root, from_=0, to=20, increment=2)
spin_step.pack(pady=5)
# Spinbox với các giá trị cụ thể
spin_values = tk.Spinbox(root, values=("Nhỏ", "Vừa", "Lớn"))
spin_values.pack(pady=5)
4. Ví dụ ứng dụng
Ứng dụng với checkbox, radiobutton và spinbox
Bây giờ, hãy kết hợp mọi thứ lại và tạo một giao diện với checkbox, radiobutton và spinbox, cho phép người dùng chọn nhiều tùy chọn và xem kết quả.
import tkinter as tk
# Tạo cửa sổ chính
root = tk.Tk()
root.title("Ví dụ với checkbox, radiobutton và spinbox")
root.geometry("300x300")
# Hàm hiển thị các lựa chọn
def show_selections():
selections = []
selections.append(f"Checkbox bật: {'Có' if option.get() == 1 else 'Không'}")
selections.append(f"Màu đã chọn: {color_choice.get()}")
selections.append(f"Số lượng: {spin.get()}")
message_label.config(text="\n".join(selections))
# Checkbox
option = tk.IntVar()
checkbox = tk.Checkbutton(root, text="Bật tùy chọn", variable=option)
checkbox.pack(pady=5)
# Radiobutton
color_choice = tk.StringVar(value="Đỏ")
tk.Label(root, text="Chọn màu:").pack()
radio_red = tk.Radiobutton(root, text="Đỏ", variable=color_choice, value="Đỏ")
radio_blue = tk.Radiobutton(root, text="Xanh Dương", variable=color_choice, value="Xanh Dương")
radio_green = tk.Radiobutton(root, text="Xanh Lá", variable=color_choice, value="Xanh Lá")
radio_red.pack()
radio_blue.pack()
radio_green.pack()
# Spinbox
tk.Label(root, text="Số lượng:").pack()
spin = tk.Spinbox(root, from_=1, to=10)
spin.pack(pady=5)
# Nút để hiển thị các lựa chọn
show_button = tk.Button(root, text="Hiển thị lựa chọn", command=show_selections)
show_button.pack(pady=10)
# Label hiển thị kết quả
message_label = tk.Label(root, text="", justify="left")
message_label.pack(pady=5)
root.mainloop()
Giải thích ví dụ
- Checkbox: Kiểm tra trạng thái "Bật tùy chọn".
- Radiobutton: Cho phép chọn một trong ba màu.
- Spinbox: Cho phép chọn số lượng từ 1 đến 10.
- Nút "Hiển thị lựa chọn": Hiển thị trạng thái hiện tại của tất cả các widget trong label
message_label
.
GO TO FULL VERSION