我得到钥匙错误:<类__main__。在试图举起另一帧时?

我收到此错误 -


KeyError: <class '__main__.PublishPage'>

这是我的代码 -


p = 0

#Now, Adding the different pages for the game

class HeadlineGame(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand=True)


        container.grid_rowconfigure(0, weight=1)

        container.grid_columnconfigure(0, weight=1)


        self.frames = {}


        frame = StartPage(container, self)

        self.frames[StartPage] = frame


        frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)


    def show_frame(self, controller):

        frame = self.frames[controller]

        frame.tkraise()


class StartPage(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)

        publishbutton = tk.Button(self, image=publishimg, borderwidth=0, command= lambda: controller.show_frame(PublishPage))

        publishbutton.image = publishimg

        publishbutton.place(x=503, y=315)


class PublishPage(tk.Frame):

        def __init__(self, parent, controller):

         button2 = tk.Button(self, text="Test")

         button2.grid(row=0, column=0)




app = HeadlineGame()

app.geometry('1366x768')

app.mainloop()

我试图解决这个问题,但无济于事。这是 lambda 命令的问题吗?我想要它,以便当我按下按钮时,它会将我带到第二帧,即使这个特定问题无法解决,有没有办法实现这一点?


谢谢。


编辑回溯错误:


> Exception in Tkinter callback Traceback (most recent call last):   File

> "C:\Users\DELL\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py",

> line 1883, in __call__

>     return self.func(*args)   File "C:\Users\DELL\Desktop\Python\intro.py", line 276, in <lambda>

>     publishbutton = tk.Button(self, image=publishimg, borderwidth=0, command= lambda: controller.show_frame(PublishPage))   File

> "C:\Users\DELL\Desktop\Python\intro.py", line 197, in show_frame

>     frame = self.frames[controller] KeyError: <class '__main__.PublishPage'>


喵喔喔
浏览 133回答 1
1回答

长风秋雁

我建议重构这样的东西。 现在将负责根据请求实例化新帧;你不必管理自己。show_frame()self.framesclass HeadlineGame(tk.Tk):&nbsp; &nbsp; def __init__(self, *args, **kwargs):&nbsp; &nbsp; &nbsp; &nbsp; tk.Tk.__init__(self, *args, **kwargs)&nbsp; &nbsp; &nbsp; &nbsp; self.container = container = tk.Frame(self)&nbsp; &nbsp; &nbsp; &nbsp; container.pack(side="top", fill="both", expand=True)&nbsp; &nbsp; &nbsp; &nbsp; container.grid_rowconfigure(0, weight=1)&nbsp; &nbsp; &nbsp; &nbsp; container.grid_columnconfigure(0, weight=1)&nbsp; &nbsp; &nbsp; &nbsp; self.frames = {}&nbsp; &nbsp; &nbsp; &nbsp; self.show_frame(StartPage)&nbsp; &nbsp; def show_frame(self, controller):&nbsp; &nbsp; &nbsp; &nbsp; if controller not in self.frames:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.frames[controller] = frame = controller(self.container, self)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; frame.grid(row=0, column=0, sticky="nsew")&nbsp; &nbsp; &nbsp; &nbsp; frame = self.frames[controller]&nbsp; &nbsp; &nbsp; &nbsp; frame.tkraise()class StartPage(tk.Frame):&nbsp; &nbsp; def __init__(self, parent, controller):&nbsp; &nbsp; &nbsp; &nbsp; tk.Frame.__init__(self, parent)&nbsp; &nbsp; &nbsp; &nbsp; publishbutton = tk.Button(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self, image=publishimg, borderwidth=0, command=lambda: controller.show_frame(PublishPage)&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; &nbsp; &nbsp; publishbutton.image = publishimg&nbsp; &nbsp; &nbsp; &nbsp; publishbutton.place(x=503, y=315)class PublishPage(tk.Frame):&nbsp; &nbsp; def __init__(self, parent, controller):&nbsp; &nbsp; &nbsp; &nbsp; button2 = tk.Button(self, text="Test")&nbsp; &nbsp; &nbsp; &nbsp; button2.grid(row=0, column=0)app = HeadlineGame()app.geometry("1366x768")app.mainloop()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python