tkinter使用导入的功能

时间:2019-02-17 18:14:07

标签: python tkinter

我有以下使用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”

我在做什么错?

谢谢!

1 个答案:

答案 0 :(得分:1)

这里发生的事情非常简单。您要在类中设置属性-在本例中为{{1}}属性...-在方法内部。但是,只有在实际调用该方法时,这种情况才会发生。

设置命令只是对其的引用,因此直到它被实际调用之前,该属性才不存在。

当您提供对方法的引用时(这会设置属性但尚未调用),然后立即调用假定该方法存在的方法,这显然是有问题的。