案例修改:tkiner的界面切换

基于如下原链接,修改后可显示
tkinter的GUI设计:界面与逻辑分离(三)-- 多页面

import plotly.graph_objects as go
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import matplotlib.dates as mpl_dates
from mpl_finance import candlestick_ohlc
from mpl_finance import candlestick2_ochl

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.draw()
        canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)

        toolbar = NavigationToolbar2Tk(canvas, self)
        toolbar.update()
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        

if __name__ == '__main__':
    # 实例化Application
    app = Application()
    
    # 主消息循环:
    app.mainloop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值