Frame not loading with tkinter
我试图用python3中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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中面向对象编程的理解是错误的。任何建议都会受到高度赞赏,谢谢。
与你上面的评论相反,把
简单的选择:制作一个句点框架,曝光它,并让
更难的选择是:一次性或根据需要制作多个周期帧。每个都有明显不同的内容。暴露第一个。然后让按钮露出下一个。有两个子选项:将大小相同的网格化(或打包或放置)框架堆叠在另一个框架的顶部,并提升要查看的框架;或仅对要查看的框架进行网格化,在进行切换时取消网格化。如果您需要重新公开以前看到的帧,我只会选择多帧路径。如果需要,请使用一个选项卡式框架小部件,如ttk.notebook,它为您处理堆叠和曝光。一个例子是一个有多个表单要填充的窗口,每个表单可能有多个用途。一个特殊的例子是Idle的选项卡式配置对话框。