Python 机架未加载tkinter

Python 机架未加载tkinter,python,python-3.x,oop,user-interface,tkinter,Python,Python 3.x,Oop,User Interface,Tkinter,我正试图用python3中的tkinter编写一个非常简单的游戏。这是一个连续的游戏,玩了很多阶段。我的问题是,在周期结束时,单击“下一个周期”按钮时,下一个周期没有加载。这是我的密码: import tkinter as tk from tkinter import ttk class Game(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs)

我正试图用python3中的
tkinter
编写一个非常简单的游戏。这是一个连续的游戏,玩了很多阶段。我的问题是,在周期结束时,单击“下一个周期”按钮时,下一个周期没有加载。这是我的密码:

import tkinter as tk
from tkinter import ttk

class Game(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 = {}

        F=Period
        frame = F(container, self)
        self.frames[F] = frame
        frame.grid(row=0, column=0, sticky='nsew')

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()

class Period(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)

        firstOffer = 5

        labelOffer = tk.Label(self, anchor='center', text=str(firstOffer))
        labelOffer.place(anchor='center', relx=0.6, rely=0.5)  

        buttonAcc = ttk.Button(self, text='Accept', command=lambda: self.PeriodSummary(parent, controller))
        buttonAcc.place(anchor='center', relx=0.35, rely=0.5)           

    def PeriodSummary(self, parent, controller):

        buttonNextPeriod = ttk.Button(self, text='Next Period', command=lambda: controller.show_frame(Period))
        buttonNextPeriod.place(anchor='center', relx=0.5, rely=0.75, width=200, height=80)          

app = Game()
app.wm_state('zoomed')
app.mainloop()

正如运行代码时所看到的,当用户单击“下一个周期”时,什么也没有发生。我希望它开始一个新的时期。我相信我对Python中面向对象编程的理解是错误的。非常感谢您提供的任何提示。

与您上面的评论相反,将
打印(self.frames)
放入
显示框架
中表示正在调用
显示框架
。由于
self.frames
只有一个项,
{:}
,并且单周期对象已经可见,
.tkraise
将公开已经公开的内容,并且没有可见的更改。有两种方法可以增加活力

简单的选择是:制作一个句点帧,曝光它,然后让
Next
按钮更改内容。如果可能的话就这么做


更难的选择是:制作多个周期帧,或者一次全部制作,或者根据需要制作。每个都有明显不同的内容。揭露第一个。然后让按钮露出下一个按钮。有两个子选项:将大小相同的网格(或打包或放置的)框架堆叠在彼此的顶部,并将您希望看到的框架升高;或者只显示您希望看到的网格,在切换时不显示网格。如果需要重新曝光之前看到的帧,我只会选择多帧路线。如果需要,可以使用选项卡式框架小部件,例如ttk.Notebook,它可以为您处理堆叠和曝光。一个例子是有多个表单要填写的窗口,每个表单可能有多个用途。IDLE的选项卡式配置对话框就是一个特别的例子

你做了什么来调试这个?您是否已验证正在调用
show\u frame
方法?如果删除
lambda
并使用自定义函数,则更容易做到这一点。然后,您可以更轻松地添加打印功能或使用调试器停止。谢谢@BryanOakley。我只是照你的建议做了(在
show_frame
函数中添加了一个小的
print
语句。事实上,
show_frame
没有被调用。但是我看不出为什么单击按钮时不会被调用。你真的需要numpy来复制这个问题吗?如果没有,你需要将它压缩成不需要修改的东西。)epend on numpy。我建议您阅读并将代码减少到显示问题所需的最低限度。今后,在未进行测试的情况下不要编写太多代码。谢谢@TerryJanReedy。我已按照您的说明缩短了代码,删除了我感兴趣的问题不需要的代码行。谢谢@TerryJanReady。我不需要重新显示以前看到的帧。我只想在单击按钮后按顺序显示周期。在我的代码中,
Next
按钮确实引用了周期帧,因此我不理解为什么不显示新的周期。我可以创建周期2、周期3等类,但这不是eleg蚂蚁,一定有更简单的方法。我会在新的帖子里以更好的方式问这个问题。