Python中tkinter的使用
一、代码
import tkinter as tk
class HomePage(tk.Frame):
def close_window(self):
self.controller.quit()
self.controller.destroy()
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="Home Page")
label.pack(pady=200, padx=200)
button = tk.Button(self, text="Go to Page 1", command=lambda: controller.show_page(Page1))
button.pack(pady=5)
button2 = tk.Button(self, text="Go to Page 2", command=lambda: controller.show_page(Page2))
button2.pack(pady=5)
# 添加一个退出按钮
quit_button = tk.Button(self, text="Quit", command=self.close_window)
quit_button.pack(pady=5)
class Page1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="Page 1")
label.pack(pady=10, padx=10)
button = tk.Button(self, text="Go back to Home", command=lambda: controller.show_page(HomePage))
button.pack(pady=5)
class Page2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="Page 2")
label.pack(pady=10, padx=10)
button = tk.Button(self, text="Go back to Home", command=lambda: controller.show_page(HomePage))
button.pack(pady=5)
class MainApplication(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.pages = {}
for Page in (HomePage, Page1, Page2):
page = Page(container, self)
self.pages[Page] = page
page.grid(row=0, column=0, sticky="nsew")
self.show_page(HomePage)
def show_page(self, page):
frame = self.pages[page]
frame.tkraise()
if __name__ == "__main__":
app = MainApplication()
app.mainloop()
二、代码解析
这段代码是一个使用Tkinter库创建多个页面的简单GUI应用程序。让我逐步解释这个代码的主要部分:
-
导入Tkinter库:
import tkinter as tk
这行代码导入了Tkinter库,并将其别名为
tk
,以便更方便地引用库中的类和方法。 -
定义页面类:
class HomePage(tk.Frame):
class Page1(tk.Frame):
class Page2(tk.Frame):
这里定义了三个页面类,分别是
HomePage
、Page1
和Page2
,它们继承自Tkinter的Frame
类。每个页面类都包含了一些标签和按钮,用于在页面间切换。 -
初始化页面类:
def __init__(self, parent, controller):
在每个页面类的
__init__
方法中,初始化页面的布局和控件。parent
参数表示父容器,controller
参数用于控制页面的切换。 -
主应用程序类:
class MainApplication(tk.Tk):
这里定义了主应用程序类
MainApplication
,继承自Tkinter的Tk
类。这个类包含了应用程序的整体结构。 -
初始化主应用程序:
def __init__(self, *args, **kwargs):
在
MainApplication
的__init__
方法中,创建了一个容器container
,然后循环遍历所有的页面类(HomePage
、Page1
、Page2
),为每个页面创建实例,并将其存储在self.pages
字典中。 -
页面切换方法:
def show_page(self, page):
show_page
方法用于切换页面,接受一个页面类作为参数,然后通过tkraise
方法将相应页面的Frame
提升到最前显示。 -
应用程序启动:
if __name__ == "__main__": app = MainApplication() app.mainloop()
在应用程序的主体部分,创建了
MainApplication
类的实例,然后调用mainloop
方法启动主事件循环,使应用程序保持运行状态。
总的来说,这个程序使用了Tkinter库创建了一个简单的多页面GUI应用。每个页面有一个标签和一个返回主页的按钮。通过MainApplication
类来管理页面之间的切换,使用户可以在不同页面之间进行导航。
三、运行结果
将该代码放入VS Code中切换到运行环境pytorch(Python 3.8.5)中运行即可呈现页面。