到目前为止,我有一个非常简单的程序,只有几个按钮,上面有事件。但是,当我运行程序时,一旦按钮启动,按钮事件就会触发。
我的代码看起来像这样的麻烦:
def initUI(self):
self.parent.title("Windows")
self.style = Style()
self.style.theme_use("default")
self.pack(fill=BOTH, expand=1)
abtn = Button(self, text="Open", command=load_file(area))
abtn.grid(row=1, column=3)
cbtn = Button(self, text="Close", command=self.parent.destroy)
cbtn.grid(row=2, column=3, pady=4)
我把它换成了行换行和load_file(它是一个打开的文件对话框,区域是我之前初始化的画布),即使在初始化下一个按钮或窗口可见之前,事件也是打开的。 尽可能具体:我不想在没有单击按钮的情况下触发它。那么我在这里做错了什么?
编辑:
这是load_file事件:
def load_file(area):
fname = askopenfilename(filetypes=(("TIF", "*.tif;*.tiff"),
("GIF", "*.gif"),
("JPEG", "*.jpg") ))
if fname:
fname = fname.replace("/", "\\")
print(fname)
Images.path = fname
import_file(fname, area)
else:
print "Could not open file ", fname
return fname
答案 0 :(得分:4)
在以下行中,代码不是load_file
,而是调用load_file
并绑定函数调用的返回值。
abtn = Button(self, text="Open", command=load_file(area))
使用labmda
替换为函数对象:
abtn = Button(self, text="Open", command=lambda: load_file(area))
答案 1 :(得分:2)
应为command=lambda: load_file(area)
。
command=load_file(area)
会致电load_file
并将返回值设为command