如何从另一个函数访问函数中定义的对象?

2024-04-16 06:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个简单的GUI应用程序来管理优先级。我一直在从另一个函数访问函数中定义的对象,在本例中,从display()访问createWindow函数中的root。窗口打开但没有标签,这是我退出程序时得到的信息:

/usr/bin/python3.5 /home/cali/PycharmProjects/priorities/priorities.py Traceback (most recent call last): File "/home/cali/PycharmProjects/priorities/priorities.py", line 34, in c.main() File "/home/cali/PycharmProjects/priorities/priorities.py", line 31, in main g.display() File "/home/cali/PycharmProjects/priorities/priorities.py", line 22, in display Label(root, NameError: name 'root' is not defined

Process finished with exit code 1

以下是我迄今为止所做的:

# priorities.py
#   GUI program to manage priorities

from tkinter import *

class Priority:
    pass

class GuiPart:

    def createWindow(self):

        root = Tk()
        root.resizable(width = False, height = False)
        root.title = "Priorities"
        root.mainloop()

        return root

    def display(self):

        Label(root,
              text = "testes").grid(row = 0, column = 1)

class Client:

    def main(self):

        g = GuiPart()
        g.createWindow()
        g.display()

c = Client()
c.main()

我使用的是python3.6。你知道吗


Tags: 函数inpyhomemaindefdisplayline
2条回答

您想在这里使用类属性,如下所示

class GuiPart:
    def createWindow(self):
        root = Tk()
        root.resizable(width=False, height=False)
        root.title = "Priorities"
        root.mainloop()

        self.root = root

        return root


    def display(self):
        Label(self.root,
              text="testes").grid(row=0, column=1)

注意root的值是如何分配给self.root,然后再从self.root读取的。self可用于在对象的生存期内存储对象属性。你知道吗

我认为您可能需要做的是在调用createWindow()后将root存储为GuiPart类的实例变量:

class GuiPart:
    def __init__(self):
        self.root = createWindow()

    def createWindow(self):

        root = Tk()
        root.resizable(width = False, height = False)
        root.title = "Priorities"
        root.mainloop()

        return root

    def display(self):

        Label(self.root,
              text = "testes").grid(row = 0, column = 1)

现在的情况是,在创建GuiPart实例时,root存储为g.root。您的主要功能如下所示:

def main(self):

    g = GuiPart()
    g.display()

你也可以这样做:

class GuiPart:
    def __init__(self):
        self.root = None

    def createWindow(self):

        root = Tk()
        root.resizable(width = False, height = False)
        root.title = "Priorities"
        root.mainloop()

        self.root = root

    def display(self):

        Label(self.root,
              text = "testes").grid(row = 0, column = 1)

那么你的主要任务是:

def main(self):
    g = GuiPart()
    g.createWindow()
    g.display()

相关问题 更多 >