想要实现类似于这种的框架的页面跳转:主界面通过两个按钮进入界面1或者界面2,界面1或者界面2通过返回按钮能到主界面进行重新选择。
登录界面的代码见上一篇学习记录,页面转换的逻辑实现修改了MainPage和view这两个模块。
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()
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()
过程中遇到问题发现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)