布尔值无法正常工作

时间:2013-12-19 19:21:08

标签: python tkinter boolean

我正在尝试获取以下代码来创建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)

3 个答案:

答案 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将更易于编写和维护,并且在调整大小或在具有不同分辨率或不同字体的系统上运行时,它们会表现得更好。