我尝试使用按钮返回值,但我无法让它工作。我想要的是按钮返回一个值,以后可以用来检查是否使用了该功能。我使用的代码如下:
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这样做,但我也无法想出那个。
答案 0 :(得分:3)
尝试查看此链接https://stackoverflow.com/a/11907627/3110529,因为它解决了您遇到的问题。
主要关注的是回调被设计为仅仅是响应事件而发生的行为,因此它们返回值并不完全有意义。在你的程序中,当你说
时 if bla == 1:
print('1')
你问的是函数指针(或引用?)是否等于它显然永远不会的1
。
您可能想要使用全局变量来覆盖它(即存储'blah'变量,然后让回调设置其值)但这通常被认为是不好的做法。相反,如在链接中,尝试将其转换为一个类,该类允许您使用成员变量以更有条理的方式存储回调的结果和响应。
答案 1 :(得分: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')
答案 2 :(得分:0)
根据Tknitter文档http://effbot.org/tkinterbook/variable.htm,您可以使用BooleanVar
StringVar
或IntVar
。它们充当全局变量。在这个花瓶中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:
命令确保在启动时不调用该函数。