[英]Switching between frames in python with functions
我希望有两个功能,在其中可以轻松切换的框架。 我可以删除“ go”框架,但是不确定如何显示其他框架。
from tkinter import *
class Trip:
def __init__(self, parent):
self.go = Frame(parent, width=500, height=450)
self.go.grid(row=0, column=0)
self.go.grid_propagate(0) # to reserve space required for frame
menuButton = Button(self.go, text="Continue", command=self.menuScreen)
menuButton.grid(row=1, column=0)
def menuScreen(self):
self.go.grid_remove()
self.menu = Frame(parent, width=500, height=450, bg='orchid')
self.menu.grid(row=0, column=0)
self.menu.grid_propagate(0) # to reserve space required for frame
self.addMore = Button(self.menuScreen, text="Return", command=self.__init__)
self.addmore.grid(row=1, column=0)
if __name__ == "__main__":
root = Tk()
root.title("Traveller Details")
play = Trip(root)
root.geometry("500x450+0+0")
root.mainloop()
parent
范围似乎仅限于constructor
初始化。 您正在menuScreen
函数中再次调用parent
menuScreen
。
尝试在类类parent
定义一个局部变量,然后将parent1
作为参数传递给构造函数。 这样, parent
属性在整个类中都是可见的。
尽管上面遇到了一些其他问题,但我相信可能取决于此处未介绍的代码的其他部分,因此我可以使用上面的内容进入下一个屏幕。
这是修改后的代码。
from tkinter import *
class Trip:
def __init__(self, parent1):
self.parent = parent1
self.go = Frame(self.parent, width=500, height=450)
self.go.grid(row=0, column=0)
self.go.grid_propagate(0) # to reserve space required for frame
menuButton = Button(self.go, text="Continue", command=self.menuScreen)
menuButton.grid(row=1, column=0)
def menuScreen(self):
self.go.grid_remove()
self.menu = Frame(self.parent, width=500, height=450, bg='orchid')
self.menu.grid(row=0, column=0)
self.menu.grid_propagate(0) # to reserve space required for frame
self.addMore = Button(self.menuScreen, text="Return", command=self.__init__)
self.addmore.grid(row=1, column=0)
if __name__ == "__main__":
root = Tk()
root.title("Traveller Details")
play = Trip(root)
root.geometry("500x450+0+0")
root.mainloop()
输出:
首先需要在__init__
创建两个框架; 然后显示带有第一帧的tk窗口。
每个框架上的可单击按钮允许您在两个框架之间来回切换。
"""
demonstrate switching back and forth between tkinter frames
"""
import tkinter as tk
class Trip:
"""
A class to demonstrate switching back and forth between tkinter frames
"""
def __init__(self, parent):
self.parent = parent
self.parent.title("Traveller Details")
self.parent.geometry("500x450+0+0")
self.go_frame = tk.Frame(self.parent, width=500, height=450, bg='light blue')
self.goto_menu_frame_button = tk.Button(self.go_frame, text="Continue", command=self.menu_screen)
self.menu_frame = tk.Frame(self.parent, width=500, height=450, bg='light steel blue')
self.goto_go_frame_button = tk.Button(self.menu_frame, text="Return", command=self.go_screen)
self.current_frame = None
self.go_screen()
def go_screen(self):
"""
The first screen to be visible - has a clickable button to switch
to the other screen
"""
self.remove_current_frame()
self.current_frame = self.go_frame
self.go_frame.grid(row=0, column=0)
self.go_frame.grid_propagate(0) # to reserve space required for frame
self.goto_menu_frame_button.grid(row=1, column=0)
def menu_screen(self):
"""
The second screen - has a clickable button to switch back to the first screen
"""
self.remove_current_frame()
self.current_frame = self.menu_frame
self.menu_frame.grid(row=0, column=0)
self.menu_frame.grid_propagate(0) # to reserve space required for frame
self.goto_go_frame_button.grid(row=0, column=0)
def remove_current_frame(self):
"""
removes the current frame from the grid if it exists
"""
if self.current_frame is not None:
self.current_frame.grid_remove()
def start(self):
"""
launches the GUI
"""
self.parent.mainloop()
if __name__ == "__main__":
trip = Trip(tk.Tk())
trip.start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.