CodeGym /Khóa học Java /Python SELF VI /Hoạt động với checkbox, radiobutton và spinbox

Hoạt động với checkbox, radiobutton và spinbox

Python SELF VI
Mức độ , Bài học
Có sẵn

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.

Python
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ến var, 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.

Python
# 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).

Python
# 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ến choice để làm cho chúng liên quan với nhau.
  • value: Xác định giá trị mà biến choice 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.

Python
# 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.

Python
# 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_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ể.

Python
# 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ả.

Python
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.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION