tkinter - 选中复选框时显示文本/按钮/条目,未选中复选框时隐藏它们

问题描述 投票:0回答:1

我目前正在制作一个小型应用程序,我希望用户输入一些数据,但有一个可选输入。我想为此使用一个复选按钮。如果选中,UI 应显示更多输入框,如果未选中,则 UI 应隐藏它们。

我正在使用最新版本的anaconda-spyder,并将spyder中的图形后端设置为tkinter

这是我迄今为止尝试过的:

import tkinter as tk

window=tk.Tk()
frame_a=tk.Frame(window)
frame_b=tk.Frame(window)
frame_c=tk.Frame(window)

entry1=tk.Entry(frame_a, width=10)
entry1.pack()

var1=tk.IntVar()
checkbtn=tk.Checkbutton(frame_b, text="more options?", variable=var1, onvalue=1, offvalue=0)
checkbtn.pack(side=tk.TOP)

if var1.get() ==1:
   entry2=tk.Entry(frame_c, width=10)
   entry2.pack()
   
   frame_a.pack()
   frame_b.pack()
   frame_c.pack()
   
else:
    frame_a.pack()
    frame_b.pack()
window.mainloop()

我假设检查按钮的状态在主循环中被检查,但它似乎只在程序开始时被检查。

或者,如果未选中检查按钮,其他选项可能会变灰/不可交互,但仍然可见(我不知道这是否会让事情变得更容易)

python tkinter checkbox
1个回答
0
投票

为了从

Checkbutton
触发回调,您需要通过
command
参数传递一个函数。每当复选框改变状态时就会调用该函数。

要显示或隐藏给定的小部件,您可以分别使用

pack
pack_forget

在这里,我设置了一个名为

toggle_options
的回调函数,它将根据
frame_c
的状态以编程方式显示或隐藏
checkbtn
(我还将
var1
的类型更改为
BooleanVar
,因为这就是对于只有两种可能状态的事物来说,这是一个更明智的选择(恕我直言)。

import tkinter as tk


def toggle_options() -> None:
    if var1.get():
        frame_c.pack()  # show the frame
    else:
        frame_c.pack_forget()  # hide the frame


window = tk.Tk()
frame_a = tk.Frame(window)
frame_b = tk.Frame(window)
frame_c = tk.Frame(window)

frame_a.pack()
frame_b.pack()

entry1 = tk.Entry(frame_a, width=10)
entry1.pack()
entry2 = tk.Entry(frame_c, width=10)
entry2.pack()

var1 = tk.BooleanVar()
checkbtn = tk.Checkbutton(
    frame_b, 
    text="more options?", 
    variable=var1, 
    command=toggle_options,  # set the callback function here
)
checkbtn.pack()

window.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.