2013-12-19 136 views
0

我想要獲得下面的代碼來創建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

'if bool1show == not True' is no valid。試試'如果不是bool1show == True'或只是'如果不是bool1show:' – karthikr

+0

@karthikr:它是完全有效的; 'not True'是'False',所以你只是比較'bool1show'和'False',這是一種有效(但笨拙)的方式來寫'if not bool1show'(假設'bool1show'是一個布爾值)。 – Lynn

+0

@nooodl在python控制檯(atleast 2.x)中試用它。 'bool1show == not True'無效 – karthikr

回答

0

您必須參考command參數中的函數,並且bool1show= True不是對函數的引用。然而,因爲你所做的只是顯示或隱藏一個小部件,所以除非你使用單選按鈕(你不知道),否則根本不需要使用布爾變量。

對於您發佈的代碼,您只需要兩個函數:一個顯示滑塊和一個隱藏它。爲此,您創建一次縮放,然後使用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將更易於編寫和維護,並且在調整大小或在具有不同分辨率或不同字體的系統上運行時,它們的表現會更好。

+0

感謝你的完美,並且比我試圖做的更有意義!我不知道grid_remove命令!再次感謝! – user2996828

0

你的代碼有一些不明確的地方,所以我不確定你試圖達到什麼目的。如果你想驗證一個真實條件,你可以這樣做:

if bool1show == True: 
    do stuff... 
#or 
if bool1show: 
    do stuff... 

if bool1show == not True:does not work。如果你真的想是這樣的,你可以這樣做:

if bool1show==(not True) 
#or better: 
if bool1show == False 
#even better: 
if not bool1show: 

希望這有助於更好地理解蟒蛇布爾

+0

我基本上試圖說,如果按下這個按鈕,bool1show開始false,如果按下另一個按鈕,則轉換bool1show true如果bool1show等於true,則轉動boolshow1 false。如果bool1show等於false,則顯示滑動條不顯示滑塊...............你能給我一個我如何做這項工作的例子嗎?謝謝 – user2996828

+0

'command = True'不會做你認爲它所做的事情(除非你認爲它什麼都不做)。 –

+0

@ BryanOakley - 是的,你是對的。我對tinkter庫並不熟悉,但在閱讀了一些文檔後,我明白該命令應該是一種方法或功能。我編輯了那部分。謝謝 – skamsie

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