2016-08-03 101 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:命令确保在启动时不调用该函数。