我有以下使用tkinter
的基本应用程序,其中有两个按钮。使用第一个按钮,我可以打开包含要对其进行分析的文件的文件夹,然后使用第二个按钮来运行分析。
from tkinter import filedialog
from tkinter import *
from pathlib import Path
from run_analysis import create_tmp_file
class MyApp():
def __init__(self,master):
frame = Frame(master)
frame.pack()
self.button_filedialog = Button(frame, text="Öffnen", fg="red",command=self.open_filedialog)
self.button_analyse = Button(frame, text="Starte Analyse", fg="green", command=self.make_analysis)
## Unpack buttons
self.button_filedialog.pack()
self.button_analyse.pack()
def open_filedialog(self):
start_path = Path.cwd()
self.data_path = filedialog.askdirectory(initialdir=start_path)
def make_analysis(self):
create_tmp_file(self.data_path,1,0.12)
root = Tk()
app = MyApp(root)
root.mainloop()
代码运行正常。但是,实际上这不是我想要的。
我想直接在第二个按钮中调用导入的函数create_tmp_file
。但是,如果我确实替换了
self.button_analyse = Button(frame, text="Starte Analyse", fg="green", command=self.make_analysis)
与
self.button_analyse = Button(frame, text="Starte Analyse", fg="green", command=create_tmp_file(self.data_path,1,0.12))
该代码不起作用,并且我收到以下错误消息:
AttributeError:“ MyApp”对象没有属性“ data_path”
我在做什么错?
谢谢!
答案 0 :(得分:1)
这里发生的事情非常简单。您要在类中设置属性-在本例中为{{1}}属性...-在方法内部。但是,只有在实际调用该方法时,这种情况才会发生。
设置命令只是对其的引用,因此直到它被实际调用之前,该属性才不存在。
当您提供对方法的引用时(这会设置属性但尚未调用),然后立即调用假定该方法存在的方法,这显然是有问题的。