python - 无需按钮即可在 Tkinter 中切换帧
问题描述
我正在使用以下代码创建一个 Tkinter 窗口并切换它显示的帧。
import tkinter
class GUI(tkinter.Tk):
def __init__(self):
tkinter.Tk.__init__(self)
self._frame = None
self.switch(Frame1)
def switch(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack()
class Frame1(tkinter.Frame):
def __init__(self, parent):
tkinter.Frame.__init__(self, parent)
tkinter.Label(self, text="Frame1").pack()
parent.switch(Frame2) # not working
tkinter.Button(self, text="switch", command=lambda: parent.switch(Frame2)).pack() # working
class Frame2(tkinter.Frame):
def __init__(self, parent):
tkinter.Frame.__init__(self, parent)
tkinter.Label(self, text="Frame2").pack()
if __name__ == '__main__':
gui = GUI()
gui.mainloop()
请注意,切换功能在没有按钮的情况下执行,但仅在单击时起作用。
解决方案
这是正在发生的事情:
- GUI开始切换到第 1 帧
- Frame1 被创建并切换到 frame 2
- GUI完成切换到第 1 帧
因此,该应用程序在第 1 帧结束
推荐阅读
- ruby-on-rails - 无法从 gem 中扩展 ActiveRecord
- sql - SQL ADD 对员工性别(M,F)的约束规则
- flutter - Flutter 拖动滚动行为在 2.5 更新后在 web 上不起作用
- mongodb - 通过 _id 从多线程应用程序中获取 mongodb 文档
- python - 从加权边缘列表计算中心性分数
- sql - Presto - 将表格转换为地图
- sockets - C#中的异步服务器套接字发送消息问题
- javascript - Javascript中是否有切片的替代方法?
- java - Wildfly 24 / java 16 / Primefaces 10 / 雅加达
- spring - 在运行时在上下文中破解 @Component bean 并覆盖其特定的字段注入依赖项之一(无测试范围)