1 场景需求

想要实现类似于这种的框架的页面跳转:主界面通过两个按钮进入界面1或者界面2,界面1或者界面2通过返回按钮能到主界面进行重新选择。
界面关系


2 运行效果

运行结果如动图所示:
运行动图


3 代码实现

登录界面的代码见上一篇学习记录,页面转换的逻辑实现修改了MainPage和view这两个模块。

  • MainPage
from view import *


class MainPage(object):
    def __init__(self, master):
        self.root = master  # 定义内部变量root
        self.root.geometry('%dx%d' % (600, 400))  # 设置窗口大小
        self.createPage()

    def createPage(self):
        # 创建不同的界面frame
        self.selectPage = selectPage(self.root)  # 子系统选择界面
        self.window1Page = window1_Frame(self.root)  # 窗口1界面
        self.window2Page = window2_Frame(self.root)  # 窗口2界面
        self.aboutPage = AboutFrame(self.root)  # 关于信息界面

        # 窗口选择界面的按钮布局
        Button(self.selectPage, text='窗口1', font=('Microsoft YaHei', 12), command=self.window1_Disp).grid(stick=E + W)
        Label(self.selectPage).grid(stick=E + W)  # 空一行
        Label(self.selectPage).grid(stick=E + W)  # 空一行
        Button(self.selectPage, text='窗口2', font=('Microsoft YaHei', 12), command=self.window2_Disp).grid(stick=E + W)

        # 窗口1界面的按钮布局
        Button(self.window1Page, text='其他页面', font=('Microsoft YaHei', 12)).grid(row=3, stick=E + W, padx=10)
        Label(self.window1Page).grid(stick=E + W)  # 空一行
        Label(self.window1Page).grid(stick=E + W)  # 空一行
        Button(self.window1Page, text='返回', font=('Microsoft YaHei', 12), command=self.selcetmodel).grid(stick=E + W,
                                                                                                         padx=10)

        # 窗口2系统界面的按钮布局
        Button(self.window2Page, text='其他界面', font=('Microsoft YaHei', 12)).grid(stick=E + W, padx=10)
        Label(self.window2Page).grid(stick=E + W)  # 空一行
        Label(self.window2Page).grid(stick=E + W)  # 空一行
        Button(self.window2Page, text='返回', font=('Microsoft YaHei', 12), command=self.selcetmodel).grid(stick=E + W,
                                                                                                         padx=10)

        self.selectPage.pack()  # 默认显示诊断子系统选择界面
        menubar = Menu(self.root)
        menubar.add_command(label='窗口选择', command=self.selcetmodel)
        menubar.add_command(label='窗口1', command=self.window1_Disp)
        menubar.add_command(label='窗口2', command=self.window2_Disp)
        menubar.add_command(label='关于', command=self.about_Disp)
        self.root['menu'] = menubar  # 设置菜单栏

    def selcetmodel(self):
        self.selectPage.pack()
        self.window1Page.pack_forget()
        self.window2Page.pack_forget()
        self.aboutPage.pack_forget()

    def window1_Disp(self):
        self.selectPage.pack_forget()
        self.window1Page.pack()
        self.window2Page.pack_forget()
        self.aboutPage.pack_forget()

    def window2_Disp(self):
        self.selectPage.pack_forget()
        self.window1Page.pack_forget()
        self.window2Page.pack()
        self.aboutPage.pack_forget()

    def about_Disp(self):
        self.selectPage.pack_forget()
        self.window1Page.pack_forget()
        self.window2Page.pack_forget()
        self.aboutPage.pack()

  • view.py
from tkinter import *


class selectPage(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.createPage()

    def createPage(self):
        Label(self).grid(row=0, stick=E + W)  # 空一行
        Label(self, text='欢迎您', font=('Microsoft YaHei', 14)).grid(row=1, stick=E + W)
        Label(self).grid(row=2, stick=E + W)  # 空一行
        Label(self).grid(row=3, stick=E + W)  # 空一行



class window1_Frame(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.root = master
        self.createPage()

    def createPage(self):
        Label(self).grid(stick=E + W)  # 空一行
        Label(self, text='欢迎来到窗口1', font=('Microsoft YaHei', 10)).grid(stick=E + W)
        Label(self).grid(stick=E + W)  # 空一行
        Label(self).grid( stick=E + W)  # 空一行


class window2_Frame(Frame):  # 继承Frame类
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.root = master  # 定义内部变量root
        self.createPage()

    def createPage(self):
        Label(self).grid(stick=E + W)  # 空一行
        Label(self, text='欢迎来到窗口2', font=('Microsoft YaHei', 10)).grid(row=1, stick=E + W)
        Label(self).grid( stick=E + W)  # 空一行
        Label(self).grid(stick=E + W)  # 空一行


class AboutFrame(Frame):  # 继承Frame类
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.root = master  # 定义内部变量root
        self.createPage()

    def createPage(self):
        Label(self).pack()  # 空一行
        Label(self, text='关于界面').pack()
        Label(self).pack()  # 空一行
        Label(self, text='xxxxxxx系统').pack()
        Label(self).pack()  # 空一行
        Label(self, text='锂盐块').pack()
        Label(self).pack()  # 空一行
        Label(self, text='2022年6月').pack()


4 写在后面

过程中遇到问题发现button的放置是重点:button的放置是在MainPage中实现的,使用frame实例化以后的页面作为master。如选择窗口界面(selectPage)中按钮的master是self.selectPage:

# 窗口选择界面的按钮布局
Button(self.selectPage, text='窗口1', font=('Microsoft YaHei', 12), command=self.window1_Disp).grid(stick=E + W)
Label(self.selectPage).grid(stick=E + W)  # 空一行
Label(self.selectPage).grid(stick=E + W)  # 空一行
Button(self.selectPage, text='窗口2', font=('Microsoft YaHei', 12), command=self.window2_Disp).grid(stick=E + W)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐