在表单加载上调用函数

时间:2013-12-26 21:05:05

标签: python function tkinter

我有一个程序,其中包含一个函数,用于从文本文件中获取填充标签的信息。如何在加载表单时调用此函数?我试着这样称呼它:

class app:
    def __init__(self,master):
        #Code to pack frame and load objects
        app.updateSIP() #Function I am trying to call
    def updateSIP(self):
        #Code that pulls data from text file
root = Tk()
root.wm_title('title')
app = App(root)
root.mainloop()

我知道这个函数有效,因为当它从另一个函数调用时它起作用。我得到的错误是:

NameError: global name 'app' is not defined

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这里有两个问题:

  1. 您将课程命名为app但在此处:

    app = App(root)
    

    您尝试将其用作App。 Python区分大小写,因此此操作将引发NameError

  2. updateSIP需要App的实例作为其第一个参数。但是,您可以这样调用它:

    app.updateSIP()
    

    以上内容会引发TypeError,因为它不会updateSIP提供App的实例。

    相反,应该这样写:

    self.updateSIP()
    

  3. 总而言之,您的代码应该是这样写的:

    class App:
        def __init__(self,master):
            #Code to pack frame and load objects
            self.updateSIP() #Function I am trying to call
        def updateSIP(self):
            #Code that pulls data from text file
    root = Tk()
    root.wm_title('title')
    app = App(root)
    root.mainloop()
    

答案 1 :(得分:0)

您的班级名称为app(),但您正在使用App()调用该班级的实例。 Python区分大小写,只需更改:

app = App(root)

为:

app = app(root)

或者,要坚持使用PEP8标准,请将app()课程重命名为App():)