【问题标题】:Accessing variable inside method, python tkinter访问方法内部的变量,python tkinter
【发布时间】:2017-07-20 07:48:39
【问题描述】:

我想先说我已经阅读了docs,但我想我不确定如何使用提供的信息,或者我只是无法看到提供的代码和我的代码。我也在谷歌上搜索了相关问题,但无济于事。我目前关注this tutorial

我已经为我正在开发的一个简单程序制作了一个 tkinter 窗口,但现在我正试图将它放在一个类中并且一切都在走下坡路。问题代码的基本结构如下:

from tkinter import *

class WindowManager(Tk):
    def __init__(self, parent):
        Tk.__init__(self, parent)
        self.parent = parent
        # Place items for console log
        self.initialize()

    def initialize(self):
        self.grid()
        self.text_item = Text(self, bd=0, bg="black", fg="white", height="15", width="56", )
        self.text_item.grid(column=0, row=0)

    def access_text(app):
        app.initialize.text_item.delete('1.0', END)


def main():
    app = WindowManager(None)
    app.title("Main Window")
    app.geometry("400x250")
    app.resizable(0, 0)
    app.mainloop()

    access_text(app)


if __name__ == "__main__":
    main()

现在这只是相关代码的基本结构,以及所有相关的内容。

当窗口关闭时出现错误提示“'function' object has no attribute 'text_item'”

我最好的猜测是,它一般是在尝试对函数做一些事情,而不是访问在相关函数中找到的代码,但我不确定访问这个变量的正确方法是什么。

任何帮助或澄清将不胜感激。感谢您的宝贵时间。

【问题讨论】:

  • 我在 python 3.5.2 中运行它,删除了在创建文本的示例中未定义的 bg、fg 和字体,它运行时没有错误。 access_window() 未被调用。为什么它有 .initialize() ?您不想创建新的文本小部件,是吗?
  • 在 access_window() 部分,我只是忘了把它放在我示例的 main 函数中,我会马上修复它。是的,我正在尝试创建一个新的文本小部件以放置在初始化时,我的问题是在类之外访问所述小部件
  • access_window() 中至少有一个错误,您正在使用类而不是实例调用实例方法。
  • 您能否将代码更新为引发错误的mcve
  • 目前还不清楚你想用app.initialize.console_log.delete('1.0', END) 线实现什么。也许它应该是app.text_item.delete('1.0', END) 行?

标签: python class methods tkinter


【解决方案1】:

我的问题是当它是类中的局部变量时,我试图从方法中访问变量

我应该有app.text_item,而不是app.initialize.text_item

感谢@Gribouillis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多