zoukankan      html  css  js  c++  java
  • tkinter的GUI设计:界面与逻辑分离(三)-- 多页面

    知识点:

    使用 tkinter.Frame.tkraise() 函数去提升当前 tkinter.Frame 的 z 轴顺序,使得多个 tkinter.Frame 的可见性得以切换

    本文基于:win7 + python34

    1

    2

    3

    4

    5

    import matplotlib
    matplotlib.use("TkAgg")
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg from matplotlib.figure import Figure import tkinter as tk from tkinter import ttk LARGE_FONT= ("Verdana", 12) class Application(tk.Tk): ''' 多页面测试程序 界面与逻辑分离 ''' def __init__(self): super().__init__() self.iconbitmap(default="kankan_01.ico") self.wm_title("多页面测试程序") 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 = {} for F in (StartPage, PageOne, PageTwo, PageThree): frame = F(container, self) self.frames[F] = frame frame.grid(row=0, column=0, sticky="nsew") # 四个页面的位置都是 grid(row=0, column=0), 位置重叠,只有最上面的可见!! self.show_frame(StartPage) def show_frame(self, cont): frame = self.frames[cont] frame.tkraise() # 切换,提升当前 tk.Frame z轴顺序(使可见)!!此语句是本程序的点睛之处 class StartPage(tk.Frame): '''主页''' def __init__(self, parent, root): super().__init__(parent) label = tk.Label(self, text="这里是主页", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = ttk.Button(self, text="去到第一页", command=lambda: root.show_frame(PageOne)).pack() button2 = ttk.Button(self, text="去到第二页", command=lambda: root.show_frame(PageTwo)).pack() button3 = ttk.Button(self, text="去到绘图页", command=lambda: root.show_frame(PageThree)).pack() class PageOne(tk.Frame): '''第一页''' def __init__(self, parent, root): super().__init__(parent) label = tk.Label(self, text="这是第一页", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = ttk.Button(self, text="回到主页", command=lambda: root.show_frame(StartPage)).pack() button2 = ttk.Button(self, text="去到第二页", command=lambda: root.show_frame(PageTwo)).pack() class PageTwo(tk.Frame): '''第二页''' def __init__(self, parent, root): super().__init__(parent) label = tk.Label(self, text="这是第二页", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = ttk.Button(self, text="回到主页", command=lambda: root.show_frame(StartPage)).pack() button2 = ttk.Button(self, text="去到第一页", command=lambda: root.show_frame(PageOne)).pack() class PageThree(tk.Frame): '''第三页''' def __init__(self, parent, root): super().__init__(parent) tk.Label(self, text="这是绘图页", font=LARGE_FONT).pack(pady=10,padx=10) button1 = ttk.Button(self, text="回到主页", command=lambda: root.show_frame(StartPage)).pack() fig = Figure(figsize=(5,5), dpi=100) a = fig.add_subplot(111) a.plot([1,2,3,4,5,6,7,8],[5,6,1,3,8,9,3,5]) canvas = FigureCanvasTkAgg(fig, self) canvas.show() canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True) toolbar = NavigationToolbar2TkAgg(canvas, self) toolbar.update() canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True) if __name__ == '__main__': # 实例化Application app = Application() # 主消息循环: app.mainloop()
  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5170744.html
Copyright © 2011-2022 走看看