我正在尝试获取以下代码来创建2个按钮,当您按下一个按钮时将显示推子,当按下另一个按钮时将隐藏推子,但显然这不起作用我认为这主要是因为我无法理解布尔在python中的工作方式,所以如果有人能帮助我,我会非常感激。
from tkinter import *
#first window
master= Tk()
master.geometry('1440x900+0+0')
master.title('DMX512 Controller')
#buttons
bw=250
bh=110
bool1show = False
Button(master,text="show the slider", command =bool1show= True).place(x=800,y=10)
Button(master,text="hide the slider", command = bool1show= not True).place(x=900,y=10)
#slider characteristics
slw=130
sll=600
sly=1
stc='blue'
if bool1show==True:
Scale(master, from_=255, to=0, length =sll,width =slw, troughcolor = stc).grid(row=sly,column=5)
if bool1show==not True:
Scale(from_=255, to=0, length =sll,width =slw, troughcolor = stc).grid(row=sly,column=5)
答案 0 :(得分:0)
您的代码存在一些歧义,因此我不确定您要实现的目标。如果您想验证True条件,您可以这样做:
if bool1show == True:
do stuff...
#or
if bool1show:
do stuff...
如果bool1show ==不是True:不起作用。如果你真的想这样做,你可以这样做:
if bool1show==(not True)
#or better:
if bool1show == False
#even better:
if not bool1show:
希望这有助于理解更好的python布尔值
答案 1 :(得分:0)
如果将command
参数分配给调用另一个函数的lambda函数,那该怎么办:
Button(master,text="show the slider", command=lambda: bool_func(bool1show).place(x=800,y=10)
Button(master,text="hide the slider",command=lambda: bool_func(bool1show,b=False).place(x=900,y=10)
其中:
def bool_func(variable, b=True): # b is True by default, hence you don't provide the argument in the first Button statement.
variable = b
return variable
有关lambda函数的一些信息,请查看here
答案 2 :(得分:0)
您必须在command
参数中提供对函数的引用,而bool1show= True
不是对函数的引用。但是,由于你所做的只是显示或隐藏一个小部件,你根本不需要使用布尔变量,除非你使用的是radiobuttons(你不是)。
对于您发布的代码,您只需要两个功能:一个用于显示滑块,另一个用于隐藏滑块。为此,您需要创建一次Scale,然后使用grid
方法显示和隐藏它。为了实现这一目标,您必须通过在全局变量中保存引用来“记住”缩放小部件。
def show_scale():
# note: grid will remember the values you used when you first called grid
the_scale.grid()
def hide_scale():
# this removes the scale from view, but remembers where it was
the_scale.grid_remove()
the_scale = Scale(master, from_=255, to=0, length =sll,width =slw, troughcolor = stc)
the_scale.grid(row=sly, column=5)
...
Button(master,text="show the slider", command show_scale).place(x=800,y=10)
Button(master,text="hide the slider", command hide_scale).place(x=900,y=10)
在不相关的说明中,我强烈建议您不使用地点。您的GUI将更易于编写和维护,并且在调整大小或在具有不同分辨率或不同字体的系统上运行时,它们会表现得更好。