【Python】使用tkinter设计开发Windows桌面程序记事本(3)

上一篇:【Python】使用tkinter设计开发Windows桌面程序记事本(2)-CSDN博客

下一篇:

作者发炎

本文章与"记事本项目"的第一篇文章类似。这里是重新创建新的"页面设置"子窗口,进行开发设计。

那为什么与上一篇文章没有衔接呢?是因为这个"页面设置"是一个独立的子窗口,并且受主窗口调度。如果代码模块混为设计开发,就会降低可读性,并且不利于代码模块维护与迭代升级。

有疑问或建议,欢迎在评论区戳我哟!

设计步骤

在"记事本项目" --> "code"目录下新建项目代码模块文件"记事本_页面设置.py"设计开发,如下图:

运行结果

代码示例:记事本_页面设置.py

"""记事本(打印)页面设置
"""# 通配符 "*"
__all__ = ['PageSetup_base']
__all__.extend(['PAPER_VAR', 'PAPER_ORIENT', 'LEFT_VAR', 'RIGHT_VAR', 'TOP_VAR', 'BOTTOM_VAR', 'HEADER_VAR', 'FOOTER_VAR'])# 导入内置模块
import tkinter as tk
from tkinter import ttk# 全局变量
# 永久保存变量
PAPER_VAR = 'A4'
PAPER_ORIENT = 1
LEFT_VAR = 20
RIGHT_VAR = 20
TOP_VAR = 25
BOTTOM_VAR = 25
HEADER_VAR = ''
FOOTER_VAR = ''class PageSetup_base(tk.Toplevel):""" 继承tk.Toplevel, 设计记事本(打印)页面设置 """def __init__(self):""" 重写父类的构造方法 """# 调用父类的构造方法super().__init__()""" 开始对记事本(打印)页面设置进行设计 """self.title('页面设置')  # 窗口标题self.geometry(f'622x418+{self.winfo_screenwidth() // 4 + 60}+{self.winfo_screenheight() // 8 + 52}')self.focus()          # 设置窗口焦点self.resizable(0, 0)  # 禁止窗口的放大self.grab_set()       # 锁定父窗口# 修改窗口标题的图片self.PageSetup_photo = tk.PhotoImage(file='.\\..\\photo\\记事本.png')self.iconphoto(True, self.PageSetup_photo)""" 窗口布局 """# (打印)纸张选择self.paperFrame = ttk.LabelFrame(self, text='纸张', padding=(191, 38))self.paperFrame.place(x=14, y=16)tk.Label(self.paperFrame).pack()# 大小self.size = tk.Label(self, text='大小(Z):')self.size.place(x=24, y=48)# 来源self.source = tk.Label(self, text='来源(S):', state='disable')self.source.place(x=24, y=92)""" 纸张大小下拉菜单 """# 修改 OptionMenu 的样式self.style = ttk.Style()self.style.configure("my.TMenubutton", background='#DCDCDC', width=35)# 纸张大小下拉菜单self.paperVar = tk.StringVar(value=PAPER_VAR)self.paperSelection = [self.paperVar.get(), f'A3{" " * 55}', 'A4', 'A5', 'B4 (JIS)', 'B5 (JIS)', 'Executive','Statement', 'Tabloid', '法律专用纸', '信纸']self.paperMenu = ttk.OptionMenu(self, self.paperVar, *self.paperSelection, style="my.TMenubutton")self.paperMenu.place(x=110, y=46)""" 纸张来源下拉菜单 """# 修改 OptionMenu 的样式self.style.configure("my2.TMenubutton", background='#C0C0C0', width=35)# 纸张大小下拉菜单self.sourceVar = tk.StringVar()self.sourceOption = [None, f'选项1{" " * 55}', '选项2', '选项3']self.sourceMenu = ttk.OptionMenu(self, self.sourceVar, *self.sourceOption, style="my2.TMenubutton")self.sourceMenu.config(state="disabled")self.sourceMenu.place(x=110, y=90)# (打印纸张)方向选择self.orientFrame = ttk.LabelFrame(self, text='方向', padding=(50, 38))self.orientFrame.place(x=14, y=147)tk.Label(self.orientFrame).pack()self.orientVar = tk.IntVar(value=PAPER_ORIENT)# (打印纸张)纵向self.lengthways = ttk.Radiobutton(self, text='纵向(O)', variable=self.orientVar, value=1)self.lengthways.place(x=26, y=180)# (打印纸张)横向self.crosswise = ttk.Radiobutton(self, text='横向(A)', variable=self.orientVar, value=2)self.crosswise.place(x=26, y=220)# (打印纸张)页边距(毫米)self.marginFrame = ttk.LabelFrame(self, text='页边距(毫米)', padding=(130, 38))self.marginFrame.place(x=136, y=147)tk.Label(self.marginFrame).pack()# 文字标签tk.Label(self, text='左(L):').place(x=148, y=180)tk.Label(self, text='右(R):').place(x=274, y=180)tk.Label(self, text='上(T):').place(x=148, y=220)tk.Label(self, text='下(B):').place(x=274, y=220)# 输入框self.leftVar = tk.IntVar(value=LEFT_VAR)self.rightVar = tk.IntVar(value=RIGHT_VAR)self.topVar = tk.IntVar(value=TOP_VAR)self.bottomVar = tk.IntVar(value=BOTTOM_VAR)self.leftEntry = ttk.Entry(self, width=6, textvariable=self.leftVar)self.leftEntry.place(x=200, y=180)self.rightEntry = ttk.Entry(self, width=6, textvariable=self.rightVar)self.rightEntry.place(x=326, y=180)self.topEntry = ttk.Entry(self, width=6, textvariable=self.topVar)self.topEntry.place(x=200, y=220)self.bottomEntry = ttk.Entry(self, width=6, textvariable=self.bottomVar)self.bottomEntry.place(x=326, y=220)# (打印纸张)预览self.previewFrame = ttk.LabelFrame(self, text='预览', padding=(88, 147))self.previewFrame.place(x=420, y=16)tk.Label(self.previewFrame).pack()self.preview_photo = tk.PhotoImage(file='.\\..\\photo\\微信余额.png')tk.Label(self, image=self.preview_photo).place(x=421, y=37)# 页眉、页脚变量self.headerVar = tk.StringVar(value=HEADER_VAR)self.footerVar = tk.StringVar(value=FOOTER_VAR)# 页眉tk.Label(self, text='页眉(H):').place(x=14, y=288)self.headerEntry = ttk.Entry(self, width=42, textvariable=self.headerVar)self.headerEntry.place(x=106, y=288)# 页脚tk.Label(self, text='页脚(F):').place(x=14, y=330)self.footerEntry = ttk.Entry(self, width=42, textvariable=self.footerVar)self.footerEntry.place(x=106, y=330)# 页眉页脚输入值网页详情介绍# 修改 Button 的样式# style.configure("my.TButton", width=6, font=("Arial", 10, 'underline'), foreground="blue")# ttk.Button(set, text='输入值', style='my.TButton').place(x=106, y=360)self.headerFooterWeb = tk.Label(self, text='输入值', relief='flat', foreground="blue", font=("Arial", 10, 'underline'))self.headerFooterWeb.place(x=106, y=360)# 确定# 修改 Button 的样式self.style.map("my.TButton", background=[('!active', '!disabled', '#00BFFF')])self.confirm = ttk.Button(self, text='确定', width=13, style='my.TButton')self.confirm.place(x=394, y=372)# 取消self.cancel = ttk.Button(self, text='取消', width=13)self.cancel.place(x=506, y=372)# 代码测试
if __name__ == '__main__':ui = PageSetup_base()    # 实例化页面设置ui.mainloop()            # 循环窗口运行
else:print(f'导入【{__name__}】')

作者:周华

创作日期:2024/1/11

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

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

相关文章

自动化测试的三种等待方式

自动化测试的等待方式主要有三种:强制等待、隐式等待和显式等待。 1. 强制等待(Sleep) 通过在代码中使用Thread.sleep()方法来实现的,该方法会阻塞当前线程的执行,程序会暂停指定的时间。 这种方式没有条件判断&…

SpringMVC 域对象共享数据

文章目录 2、使用ModelAndView向request域对象共享数据3、使用Model向request域对象共享数据4、使用map向request域对象共享数据5、使用ModelMap向request域对象共享数据6、Model、ModelMap、Map的关系7、向session域共享数据8、向application域共享数据 1、使用ServletAPI向re…

钉钉java登录

获取token :API Explorer 获取部门列表:获取部门列表 - 钉钉开放平台

通过wireshark抓取的流量还原文件(以zip为例)

wireshark打开流量包,通过zip关键字查找 追踪流可查看详细信息 选中media Type右键, 点击导出分组字节流选项 将生成的文件进行命名,需要时什么格式就以什么格式后缀

ffmpeg api-alac-text.c

generate_raw_frame 这个函数接受一个 frame_data 数组作为参数,用于存储音频数据。i 参数表示当前帧的索引,sample_rate 是采样率,channels 是声道数,frame_size 是帧大小。函数使用一个简单的算法生成音频数据,然后…

leetcode:LCR 159. 库存管理 III(python3解法)

难度:简单 仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限。 示例 1: 输入:stock [2,5,7,4], cnt 1 输出:[2]示例…

探秘人工智能大会:揭示未来技术发展趋势与学习之道

随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。 参加人工智能大会,不仅能够洞察到最前沿的技术动态,还能与业界专家、学者交流思想,共同探讨AI的未来发展。本文将带您探秘人工智能大…

nuxt pm2使用、启动、问题解决方案

pm2简介 pm2是一个进程管理工具,可以用它来管理node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能,在前端和nodejs的世界中用的很多 pm2安装 安装pm2: $ npm install -g pm2查看pm2的安装…

TinyLlama-1.1B(小羊驼)模型开源-Github高星项目分享

简介 TinyLlama项目旨在在3万亿tokens上进行预训练,构建一个拥有11亿参数的Llama模型。经过精心优化,我们"仅"需16块A100-40G的GPU,便可在90天内完成这个任务🚀🚀。训练已于2023-09-01开始。项目地址&#…

2024在视频号开店怎么样?平台现状如下,有电商经验者优先!

我是王路飞。 现在开网店、做电商的平台有很多,但是有着绝对流量优势的,除了抖音之外就是视频号了。 但是抖音跟视频号相比,已经属于一个很成熟的平台了,商家们也开始进入到内卷阶段了。 所以,如果你们2024年想做电…

列表进入详情页的传参问题(vue的问题)

<router-link :to"{path: detail, query: {id: 1}}">前往detail页面</router-link> c页面的路径为http://localhost:8080/#/detail?id1&#xff0c;可以看到传了一个参数id1&#xff0c;并且就算刷新页面id也还会存在。此时在c页面可以通过id来获取对应…

[AutoSar]基础部分 RTE 07 VFB虚拟功能总线

目录 关键词平台说明一、VFB1.1VFB是什么1.1VFB的好处1.2VFB的坏处 二、VFB在ECU内部的描述2.1Components2.2 Port-Interfaces2.3 Port2.4 Compositions 关键词 嵌入式、C语言、autosar、VFB 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0…

【Java后端】——JAVA后端学习路线

前言 hello小伙伴们&#xff0c;博主学后端也有一段时间了&#xff0c;感觉后端的知识确实比较多&#xff0c;对于逻辑思维的要求和基础要求也比较高。接下来咱们就一起捋一捋后端的学习路线&#xff0c;然后咱们就开始按顺序对每一块知识进行复习&#xff0c;总结和串联。 j…

bmp图像文件格式超详解

0 BMP简介 BMP(Bitmap-File)图形文件&#xff0c;又叫位图文件&#xff0c;是Windows采用的图形文件格式&#xff0c;在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。一个BMP文件由四部分组成&#xff1a; B…

Redis-Cluster 与 Redis 集群的技术大比拼

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Redis-Cluster 与 Redis 集群的技术大比拼 前言概念与原理对比Redis-Cluster&#xff1a;基于哈希槽的分布式解决方案传统 Redis 集群&#xff1a;主从架构下的数据分片方式 搭建与配置的异同Redis-Cl…

OpenCV入门04:调整图像对比度和亮度

教程开源 本教程开源&#xff0c;地址&#xff1a;https://gitee.com/zccbbg/opencv_study 图像的亮度和对比度说明 亮度&#xff1a; 亮度是指图像中像素的整体明亮程度。在数字图像中&#xff0c;每个像素都有一个灰度值&#xff0c;表示其亮度水平。亮度越高&#xff0c;像…

Elasticsearch DSL指令请求前缀解析:快速参考指南【记录】

简单记录&#xff0c;后续整理补充 介绍&#xff1a; Elasticsearch的DSL&#xff08;Domain Specific Language&#xff09;提供了丰富的指令和操作&#xff0c;用于执行各种搜索、索引和管理任务。在使用这些指令时&#xff0c;需要使用适当的请求前缀来标识所需的操作。本文…

数据分析-Pandas如何轻松处理时间序列数据

Pandas-如何轻松处理时间序列数据 时间序列数据在数据分析建模中很常见&#xff0c;例如天气预报&#xff0c;空气状态监测&#xff0c;股票交易等金融场景。此处选择巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 NO2​数据作为样例。 python数据分析-数据表读写到pandas 经典…

omics简介

omics简介 公众号pythonic生物人写的系列文章介绍了组学的相关内容&#xff0c;本文仅做了一个简单的知识框架&#xff0c;供后面遇到对应问题&#xff0c;快速查阅。欢迎大家去关注原作者。 这篇文章也非常值得阅读&#xff1a;肿瘤NGS行业新人如何构建自己的知识体系-思考问题…

YOLOV8

YOLOv8 是 ultralytics &#xff08;超溶体&#xff09;公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本&#xff0c;目前支持图像分类、物体检测和实例分割任务&#xff0c;在还没有开源时就收到了用户的广泛关注。 总结&#xff1a; 1. 是YOLOV5的继承者 2. …