from tkinter import *
def page2():
root1.destroy()
import page2
root1 = Tk()
root1.geometry("300x150+177+180")
Label(root1, text="Hi I am page 1").pack()
Button(root1, text="Page 2", command=page2).pack()
root1.mainloop()
和第 2 页:
from tkinter import *
def page1():
root2.destroy()
import page1
root2 = Tk()
root2.geometry("300x150+177+180")
Label(root2, text="Hi I am page 2").pack()
Button(root2, text="Page 1", command=page1).pack()
root2.mainloop()
该程序运行良好,但当您使用该按钮两次时,程序停止。
正如 Kevin 所提到的,该import
语句只导入一次。简单的解决方案是替换import page2
为os.system("python page2.py")
. 但是每次切换页面时都会生成一个新的 Python 进程......
相反,您可以根据此处显示的结构将应用程序的每个页面定义为一个类,并将它们保存在不同的文件中。
页面1.py
import tkinter as tk
class Page1(tk.Frame):
def __init__(self, controller):
tk.Frame.__init__(self, controller)
tk.Label(self, text="Hi I am page 1").pack()
tk.Button(self, text="Page 2",
command=lambda:controller.show_page("Page2")).pack()
page2.py
import tkinter as tk
class Page2(tk.Frame):
def __init__(self, controller):
tk.Frame.__init__(self, controller)
tk.Label(self, text="Hi I am page 2").pack()
tk.Button(self, text="Page 1",
command=lambda:controller.show_page("Page1")).pack()
控制器文件:
import tkinter as tk
from page1 import Page1
from page2 import Page2
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.pages = {}
# Create 2 overlapping pages
for P in [Page1, Page2]:
page = P(self)
page.grid(row=0, column=0, sticky="nsew")
self.pages[P.__name__] = page
self.show_page("Page1")
def show_page(self, frameName):
self.pages[frameName].lift()
# Launch the app
app = App()
app.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句