Tkinter按钮事件在加载时触发

时间:2014-01-05 12:36:57

标签: python events button tkinter

到目前为止,我有一个非常简单的程序,只有几个按钮,上面有事件。但是,当我运行程序时,一旦按钮启动,按钮事件就会触发。

我的代码看起来像这样的麻烦:

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

2 个答案:

答案 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