1、搭建基于tkinter的一个View框架,实现多个页面切换

使用面向对象设计方法,定义一个tk.Tk派生类 AppView 作为容器。这个容器来放置所有页面,和切换页面。

定义一个tk.Frame派生类作为页面容器,在页面容器中继续放置button、label等实现具体的业务GUI功能。

# -*- coding: utf-8 -*-import tkinter as tk
from tkinter import ttk# 设置全局字体样式
LARGE_FONT = ("Verdana", 12)# 定义一个tk.Tk派生类
class AppView(tk.Tk):def __init__(self):super().__init__()self.name ="Class: Application(tk.Tk)"self.wm_title("多页面切换程序")# 创建一个容器框架来放置所有页面self.container = tk.Frame(self)self.container.pack(side="top", fill="both", expand=True)# 同一个容器内,使用布局方法必须相同self.container.grid_rowconfigure(0, weight=1)self.container.grid_columnconfigure(0, weight=1)# 初始化页面框架字典self.pages = {}for F in (StartPage, PageOne, PageTwo, PageThree):frame = F(self.container, self)self.pages[F] = frameframe.grid(row=0, column=0, sticky="nsew")# 显示起始页面
        self.show_page(StartPage)# 创建工具栏 Frameself.toolbar_frame = tk.Frame(self, bg='gray')self.toolbar_frame.pack(side=tk.BOTTOM, fill=tk.X)# 同一个容器内,使用布局方法必须相同# 创建按钮并绑定页面切换命令
        self.create_toolbar_buttons()def show_page(self, cont):frame = self.pages[cont]frame.tkraise()def create_toolbar_buttons(self):self.button1 = ttk.Button(self.toolbar_frame, text="去到第一页", command=lambda: self.show_page(PageOne)).pack(side=tk.LEFT)  # 同一个容器内,使用布局方法必须相同self.button2 = ttk.Button(self.toolbar_frame, text="去到第二页", command=lambda: self.show_page(PageTwo)).pack(side=tk.LEFT)  # 同一个容器内,使用布局方法必须相同self.button3 = ttk.Button(self.toolbar_frame, text="去到第三页", command=lambda: self.show_page(PageThree)).pack(side=tk.LEFT)# 同一个容器内,使用布局方法必须相同self.button4 = ttk.Button(self.toolbar_frame, text="去到主页面", command=lambda: self.show_page(StartPage)).pack(side=tk.LEFT)# 同一个容器内,使用布局方法必须相同def print_class(self):print(self.name)
# 定义一个tk.Frame派生类(以StartPage为例,其他页面类似)
class StartPage(tk.Frame):def __init__(self, parent, root):self.name ="Class: StartPage(tk.Tk)"super().__init__(parent)label = tk.Label(self, text="这里是主页", font=LARGE_FONT)label.pack(pady=10, padx=10)# 同一个容器内,使用布局方法必须相同
        root.print_class()def print_class(self):print(self.name)
# 类似地定义PageOne, PageTwo, PageThree(省略以避免重复)# 定义一个tk.Frame派生类,class PageOne(tk.Frame):
class PageOne(tk.Frame):def __init__(self, parent, root):self.name = "Class: StartPage(tk.Tk)"super().__init__(parent)label = tk.Label(self, text="这里是1页", font=LARGE_FONT)label.pack(pady=10, padx=10)# 同一个容器内,使用布局方法必须相同
        root.print_class()def print_class(self):print(self.name)# 定义一个tk.Frame派生类,class PageTwo(tk.Frame):
class PageTwo(tk.Frame):def __init__(self, parent, root):super().__init__(parent)self.name = "Class: StartPage(tk.Tk)"label = tk.Label(self, text="这里是2页", font=LARGE_FONT)label.pack(pady=10, padx=10)# 同一个容器内,使用布局方法必须相同
        root.print_class()def print_class(self):print(self.name)# 定义一个tk.Frame派生类,class PageThree(tk.Frame):
class PageThree(tk.Frame):def __init__(self, parent, root):super().__init__(parent)self.name = "Class: StartPage(tk.Tk)"label = tk.Label(self, text="这里是3页", font=LARGE_FONT)label.pack(pady=10, padx=10)# 同一个容器内,使用布局方法必须相同
        root.print_class()def print_class(self):print(self.name)if __name__ == '__main__':app =  AppView()app.mainloop()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877022.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型

目录大模型的演变大模型的使用与训练大模型的特点与分类大模型的工作流程大模型的应用 大模型的演变机器学习:深度学习:大模型的使用与训练 大模型的特点与分类 大模型的工作流程 大模型的应用本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.co…

“星门计划对AI未来的意义——以及谁将掌控它”

“星门计划对AI未来的意义——以及谁将掌控它”图片由DALL-E 3生成就在几天前,唐纳德特朗普宣布了“星门计划”,OpenAI随即跟进,分享了更多细节。他们明确表示,计划在未来四年内投资5000亿美元,在美国为OpenAI构建一个全新的AI基础设施。这让我颇感意外,尤其是考虑到埃隆…

A Critique of ANSI SQL Isolation Levels.18695069

原文:A critique of ANSI SQL isolation levels摘要:ANSI SQL-92[MS, ANSI]使用脏读、不可重复读以及幻读现象(phenomena)定义了隔离级别,本论文展示了这些现象,以及ANSI SQL定义并无法合适的描述众多流行的隔离级别,包括(ANSI标准)所涵盖的级别的标准锁实现。我们还介…

HTML, CSS

什么是 HTML、CSS HTML (HyperText Markup Language): 超文本标记语言. 超文本: 超越了普通文本的限制, 比普通文本更加强大. 除了文字信息, 还可以定义图片、音频、视频等内容. 标记语言: 由标签构成的语言. HTML 标签都是预定义好的。例如: 使用 <a> 展示超链接,使用 &…

Cisco NX-OS System Software - ACI 16.1(2f) - 适用于 ACI 模式下的 Nexus 9000 系列交换机系统软件

Cisco NX-OS System Software - ACI 16.1(2f) - 适用于 ACI 模式下的 Nexus 9000 系列交换机系统软件Cisco NX-OS System Software - ACI 16.1(2f) 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件 请访问原文链接:https://sysin.org/blog/cisco-aci-16/ 查看最新版…

Cisco APIC 6.1(2f)F - 应用策略基础设施控制器

Cisco APIC 6.1(2f)F - 应用策略基础设施控制器Cisco APIC 6.1(2f)F - 应用策略基础设施控制器 Application Policy Infrastructure Controller (APIC) 请访问原文链接:https://sysin.org/blog/cisco-apic-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org思科…

[搬运自 qq 空间] 19 北大冬令营小结

PKU 冬令营19北大冬令营小结 北大冬令营刚刚结束 , 以下是这两天以来笔者的经历。 Day1 比赛日 上午开营仪式 , 整个过程大概就是讲了一下北大计算机学科有哪些优势 , 比较无趣。 12 : 40的时候来到机房准备考试 , 1 : 00钟时 , 比赛正式开始。 首先浏览了一下A题 , 是吉…

X3ctf 比赛 Write Up

X3ctf Write Up 1. Misc p11n-trophy(签到题): 题目描述:我们首先会得到这样一份证书:第一题签到题的答案就是证书下面正中间的“This certificate does not grant the rank of Master"。 trophy-plus + trophy-plus64: 这两道目描述一模一样其中一个flag是藏在certif…

python--用户意见

https://www.python.org/about/quotes/

虚拟记账系统之三种结算模式

虚拟记账系统作为近年来支付领域的创新产品,正成为企业资金管理和支付结算的重要工具。本文从支付断直连的背景出发,详细介绍了虚拟记账系统的三种结算模式:收单结算、归集直清和归集调拨,并深入探讨了这些模式在直播电商、企业资金管理等场景中的应用。从这篇文章开始,我…

RocketMQ实战—2.RocketMQ集群生产部署

大纲 1.什么是消息中间件 2.消息中间件的技术选型 3.RocketMQ的架构原理和使用方式 4.消息中间件路由中心的架构原理 5.Broker的主从架构原理 6.高可用的消息中间件生产部署架构 7.部署一个小规模的RocketMQ集群进行压测 8.如何对RocketMQ集群进行可视化的监控和管理 9.进行OS内…