2016-08-03 148 views
2

我想使用按鈕返回一個值,但我無法讓它工作。我想要的是返回一個值的按鈕,以後可以用來檢查該功能是否被使用。我正在使用的代碼如下:使用按鈕返回值

from Tkinter import * 
master = Tk() 
master.geometry("200x100") 
def bla(): 
    return 1 
Button(master, command = bla, text = 'OK').pack() 

if bla == 1: 
    print('1') 

mainloop() 

我也試圖用lambda來做這個,但是我也無法弄清楚這一點。

回答

2

請試着看看這個鏈接https://stackoverflow.com/a/11907627/3110529,因爲它解決了你有問題。

主要問題是回調函數被設計爲只是一個響應事件而發生的行爲,因此它們並不完全適合它們返回值。在你的程序中,當你說

if bla == 1: print('1')

你問如果函數指針(或引用?)等於1它顯然永遠不會。

你可能會試圖用全局變量來覆蓋這個(即存儲'blah'變量,然後讓回調設置它的值),但這通常被認爲是不好的做法。相反,在鏈接中,嘗試將其轉換爲一個類,該類將允許您使用成員變量以更有組織的方式存儲回調的結果和響應。

+1

這實際上比我寫的答案要好。在這裏,請點贊。 – Readme

1

你的問題是你沒有保存返回值bla()

您可以使用全局變量做到這一點:

from Tkinter import * 
master = Tk() 
master.geometry("200x100") 

gloBla = 0 
def bla(): 
    global gloBla 
    gloBla = 1 
Button(master, command = bla, text = 'OK').pack() 


mainloop() 

if gloBla == 1: 
    print('1') 
0

由於每Tknitter文檔http://effbot.org/tkinterbook/variable.htm,您可以使用BooleanVarStringVarIntVar。它們充當全局變量。在這個花瓶Variable隨着每次點擊按鈕而改變。

from Tkinter import * 
master = Tk() 
Variable = BooleanVar() 
Variable.set(False) 

app = Frame(master, borderwidth=10).grid() 

def bla(): 
    print("1") 
    if Variable.get() == 0:Variable.set(True) 
    else:Variable.set(False) 
    print("current state of Variable: {0} ".format(Variable.get())) 

button1= Button(app, text = "Click Me",command=lambda:bla()).grid() 

mainloop() 

lambda:命令確保在啓動時不調用該函數。