【问题标题】:AttributeError: 'Application' object has no attribute 'tunes_list'AttributeError:“应用程序”对象没有属性“tunes_list”
【发布时间】:2021-05-21 11:11:07
【问题描述】:

我正在尝试创建一个应用程序,让我可以为我玩的游戏生成音乐。但无论如何,我的目标是从 sqlite3 数据库保存和加载数据。但实际上发生的是:

Traceback (most recent call last):
  File "d:\Visual Studio\DRIFT_TUNER\gui.py", line 360, in <module>     
    app = Application(master=root)
  File "d:\Visual Studio\DRIFT_TUNER\gui.py", line 16, in __init__      
    self.populate_list()
  File "d:\Visual Studio\DRIFT_TUNER\gui.py", line 350, in populate_list
    self.tunes_list.delete(0, tk.END)
AttributeError: 'Application' object has no attribute 'tunes_list'

当我调用函数 populate_list() 时会发生这种情况:

def populate_list(self):
        self.tunes_list.delete(0, tk.END)
        for row in db.fetch():
            self.tunes_list.insert(tk.END, row)

这是我的两个文件的 Pastebins:

gui.py:https://pastebin.com/aJ5qAwtS
db.py:https://pastebin.com/mp3RnVK2

populate_list() 应该清除列表框中的文本,然后从数据库中获取数据并将该数据逐行插入到列表框中。我正在使用带有 tkinter 和 sqlite3 的 Python 3.9.5。

我尝试过的事情:

  • 将所有缩进转换为空格,并将所有空格转换为缩进。
  • 重新声明tunes_list

我一开始并不完全了解这个错误意味着什么,所以任何帮助都会很好。

【问题讨论】:

  • self.tunes_list 是在您的 load_window 方法中创建的。仅当按下按钮(名为 self.load_button)时才会调用您的 load_window。但是,一旦您创建了 Application 对象,您就尝试调用使用 self.tunes_list 的 populate_list。因此,只有在按下按钮时才创建变量,但在此之前尝试访问它
  • @TheLizzard 您可以将其发布为答案,因为它有效。我想将其标记为正确。

标签: python oop tkinter


【解决方案1】:

self.tunes_list 是在您的 load_window 方法中创建的。仅当按下按钮(名为 self.load_button)时才会调用您的 load_window。但是一旦您创建了Application 对象,您就尝试调用使用self.tunes_list 的populate_list。因此,您仅在按下按钮时才创建变量,但在此之前尝试访问它。

【讨论】:

    【解决方案2】:

    您可以通过在您的__init__ 中添加self.tunes_list = tk.Entry() 来解决此问题,或者添加任何您的 tunes_list 为 idk

    【讨论】:

    • 你看过 OP 贴出的代码了吗?他/她将其作为列表发布到 pastebin。这个答案行不通
    • @TheLizzard 这个答案在我的电脑上用我从 pastebin 复制的代码可以正常工作
    • @TheLizzard 换句话说,我也写了同样的内容
    猜你喜欢
    • 2018-10-17
    • 2019-04-27
    • 2021-11-02
    • 2021-04-06
    • 2011-09-18
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多