尝试调用顶级类中的函数时,我不断收到 AttributeError: 'Toplevel' object has no attribute 'addtolist'

问题描述 投票:0回答:1

我正在尝试在我的

addtolist(self)
类中使用我的函数
TopSoftwareWindow()
,并且我不断得到

AttributeError: 'Toplevel' object has no attribute 'addtolist'

这是我要修复的特定类的代码

class TopSoftwareWindow(ttk.Frame): 
    def __init__(self):
        self = tk.Toplevel()
        self.geometry("800x600")
        self.resizable(False, False)
        self.title("Software Window")
        self.iconbitmap('MediaTracker_Icon.ico') 
        
        # Everything that appears on this window
        self.Entry_Field = ttk.Entry(self)

        self.Text_List = tk.Listbox(self)
        self.Category_List = tk.Listbox(self)

        self.New_Entry_Btn = ttk.Button(self, text="New Entry", command=self.addtolist)
        self.Save_File_Btn = ttk.Button(self, text="Save File")
        self.Load_File_Btn = ttk.Button(self, text="Load File")
        self.Quit_Btn = ttk.Button(self, text="Quit")

        self.Entry_Field.place(x= 0, y= 0, width= 724)
        
        self.New_Entry_Btn.place(x= 725, y= 0)
        
        self.Text_List.place(x= 0, y= 25, width= 625, height= 570)
        self.Category_List.place(x= 626, y= 25, width= 99, height= 570)

        self.Save_File_Btn.place(x= 725, y= 25)
        self.Load_File_Btn.place(x= 725, y= 50)
        self.Quit_Btn.place(x= 725, y= 570)

    def addtolist(self):
        text = self.Entry_Field.get()
        if text:
            self.Text_List.insert(tk.END, text)
            self.Entry_Field.delete(0, tk.END)

我只是希望能够将这些内容添加到 GUI 内的文本列表中,但这会导致整个窗口不显示。

我真的很感谢尽快提供任何帮助,因为这是周日到期的作业,而我已经为此苦苦挣扎了 3 天。

python function tkinter toplevel
1个回答
0
投票

问题是你在这里压倒了

self
(你真的不想/不需要这样做):

self = tk.Toplevel()

也就是说,我怀疑你在这里甚至不需要

Toplevel
窗口。如果您尝试设置 tkinter 应用程序,您可以/应该从主类中的
tk.Tk
继承,如下所示:

import tkinter as tk
from tkinter import ttk


class TopSoftwareWindow(tk.Toplevel):
    def __init__(self):
        super().__init__()  # initialize Tk (the superclass)
        # self = tk.Toplevel()  # you don't need this
        self.geometry("800x600")
        self.resizable(False, False)
        self.title("Software Window")
        self.iconbitmap('MediaTracker_Icon.ico')

        # Everything that appears on this window
        self.Entry_Field = ttk.Entry(self)

        self.Text_List = tk.Listbox(self)
        self.Category_List = tk.Listbox(self)

        self.New_Entry_Btn = ttk.Button(self, text="New Entry", command=self.addtolist)
        self.Save_File_Btn = ttk.Button(self, text="Save File")
        self.Load_File_Btn = ttk.Button(self, text="Load File")
        self.Quit_Btn = ttk.Button(self, text="Quit")

        self.Entry_Field.place(x= 0, y= 0, width= 724)

        self.New_Entry_Btn.place(x= 725, y= 0)

        self.Text_List.place(x= 0, y= 25, width= 625, height= 570)
        self.Category_List.place(x= 626, y= 25, width= 99, height= 570)

        self.Save_File_Btn.place(x= 725, y= 25)
        self.Load_File_Btn.place(x= 725, y= 50)
        self.Quit_Btn.place(x= 725, y= 570)

    def addtolist(self):
        text = self.Entry_Field.get()
        if text:
            self.Text_List.insert(tk.END, text)
            self.Entry_Field.delete(0, tk.END)


if __name__ == '__main__':
    app = TopSoftwareWindow()
    app.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.