为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2022-09-27 10:08:20
我收到此错误 -KeyError: <class '__main__.PublishPage'>这是我的代码 -p = 0#Now, Adding the different pages for the gameclass 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'>
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

我建议重构这样的东西。 现在将负责根据请求实例化新帧;你不必管理自己。show_frame()self.frames


class HeadlineGame(tk.Tk):

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

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

        self.container = 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 = {}

        self.show_frame(StartPage)


    def show_frame(self, controller):

        if controller not in self.frames:

            self.frames[controller] = frame = controller(self.container, self)

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

        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()


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号