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

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

下一篇:

作者发炎

衔接上一篇文章,本文章完成了"页面设置"子窗口的部分功能,并且点击"确定"按钮后会把当前设置的参数保存到文件里。但是,右侧的图片预览未实现,我的理解是:每设置一处打印纸张的参数,相应的预览会同步更新图片,那么就要很多的图片提供显示,所以现阶段就把这个功能忽略了。

打印纸张的来源也没有完成,我的理解是:打印机放置打印纸张的地方,现阶段没能力实现。

如果大家复制示例代码去运行时,就会发现有两个窗口,这不是BUG,也不用隐藏主窗口,在下一篇文章里会得到验证。

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

设计步骤

在"记事本项目" --> "code"目录下新建了一个"记事本_页面设置功能设计_1.py"文件,开始本阶段的项目设计开发,如下图:

运行结果

导入【记事本项目.code.记事本_页面设置】
预览图片纸张大小:A4
预览图片纸张方向:纵向
预览图片页边距:(20, 20, 25, 25)
预览图片页眉/页脚:('', '').........
预览图片纸张大小:A5
预览图片纸张方向:横向
预览图片页边距:(100, 100, 200, 200)
预览图片页眉/页脚:('300', '300')
(1, 'A4', 20, 20, 25, 25, '', '')
确定
(2, 'A5', 100, 100, 200, 200, '300', '300')

 

 此时会发现"记事本项目" --> "data"目录下新建了一个"page_setup.txt",文件内容如下:

A5(*)2(*)100(*)100(*)200(*)200(*)300(*)300(*)

代码示例:记事本_页面设置功能设计_1.py

"""记事本(打印)页面设置功能设计未完成:1.右侧实时图片预览未完成2.来源(S)功能未完成"""# 通配符 "*"
__all__ = ['PageSetup_1']# 导入内置模块
import webbrowser, os
import tkinter.messagebox as tkmb# 导入"记事本功能设计_1"模块
from 记事本项目.code.记事本_页面设置 import *class PageSetup_1(PageSetup_base):""" 继承PageSetup_base, 设计记事本(打印)页面设置 """def __init__(self):""" 重写父类的构造方法 """# 调用父类的构造方法super().__init__()""" 开始对记事本(打印)页面设置进行设计 """# 还原上次"页面设置"的参数self.updateData()# 右侧预览还原上次"页面设置"的参数图片self.pagesetupData()# 当在纸张大小下拉菜单选择纸张时,在右侧预览应该同步显示(未完成)# self.paperMenu.configure(command=self.paperOption)# 由于self.paperMenu对象的configure()方法没有command属性(求解决方法)# 所以才使用self.paperVar对象的trace(),但也导致了会调用两次(求解)self.paperVar.trace('w', lambda a, b, c: self.pagesetupData())# (打印纸张)纵向,右侧预览同步更新(未完成)self.lengthways.configure(command=self.pagesetupData)# (打印纸张)横向,右侧预览同步更新(未完成)self.crosswise.configure(command=self.pagesetupData)# 捆绑获取输入框的数据事件,右侧预览同步更新(未完成)self.bind('<KeyRelease>', self.pagesetupData)# 捆绑跳转网页事件self.headerFooterWeb.bind('<Button-1>', lambda event: webbrowser.open('https://support.microsoft.com/zh-cn/windows/更改记事本中的页眉和页脚命令-c1b0e27b-497d-c478-c4c1-0da491cac148'))# 确定当前页面所有参数设置self.confirm.config(command=lambda: self.confirmCancel('确定'))# 取消放弃当前设置,并返回self.cancel.configure(command=lambda: self.confirmCancel('取消'))# "页面设置"窗口确定与取消def confirmCancel(self, option, event=None):global PAPER_VAR, PAPER_ORIENTglobal LEFT_VAR, RIGHT_VAR, TOP_VAR, BOTTOM_VARglobal HEADER_VAR, FOOTER_VARprint(f'{PAPER_ORIENT, PAPER_VAR,LEFT_VAR, RIGHT_VAR, TOP_VAR, BOTTOM_VAR,HEADER_VAR, FOOTER_VAR}')print(option)if option == '确定':# 修改的数值保存到全局变量PAPER_VAR = self.paperVar.get()         # (打印纸张)尺寸大小PAPER_ORIENT = self.orientVar.get()     # (打印纸张)方向# (打印纸张)设置页边距(毫米)LEFT_VAR = self.leftVar.get()           # (打印纸张)左页边距RIGHT_VAR = self.rightVar.get()         # (打印纸张)右页边距TOP_VAR = self.topVar.get()             # (打印纸张)上页边距BOTTOM_VAR = self.bottomVar.get()       # (打印纸张)下页边距# (打印纸张)设置页眉页脚HEADER_VAR = self.headerVar.get()       # (打印纸张)页眉FOOTER_VAR = self.footerVar.get()       # (打印纸张)页脚# "页面设置"数据参数保存到文件data_list = [PAPER_VAR, PAPER_ORIENT, LEFT_VAR, RIGHT_VAR, TOP_VAR, BOTTOM_VAR, HEADER_VAR, FOOTER_VAR]with open('.\\..\\data\\page_setup.txt', 'w', encoding='utf-8') as file:# 写入数据for i in data_list:file.write(f'{i}(*)')file.write('\n')print(f'{PAPER_ORIENT, PAPER_VAR, LEFT_VAR, RIGHT_VAR, TOP_VAR, BOTTOM_VAR, HEADER_VAR, FOOTER_VAR}')elif option == '取消':# 判断是否有修改"页面设置"参数if PAPER_VAR != self.paperVar.get() or PAPER_ORIENT != self.orientVar.get() or LEFT_VAR != self.leftVar.get() \or RIGHT_VAR != self.rightVar.get() or TOP_VAR != self.topVar.get() or BOTTOM_VAR != self.bottomVar.get()\or HEADER_VAR != self.headerVar.get() or FOOTER_VAR != self.footerVar.get():self.bell()     # 发出警告声音if not tkmb.askokcancel('取消', f'当前"页面设置"的参数有所改动 !\n\n是否坚持放弃修改并退出 ?\n{" "*60}', parent=self):return# 关闭当前窗口self.destroy()# 还原上次"页面设置"参数def updateData(self, event=None):global PAPER_VAR, PAPER_ORIENTglobal LEFT_VAR, RIGHT_VAR, TOP_VAR, BOTTOM_VARglobal HEADER_VAR, FOOTER_VAR# 若是文件存在if os.path.exists('.\\..\\data\\page_setup.txt'):# 打开文件with open('.\\..\\data\\page_setup.txt', encoding='utf-8') as file:# 读取文件数据for row in file:# 更新"页面设置"参数的数据self.paperVar.set(row.split('(*)')[0])          # (打印纸张)尺寸大小self.orientVar.set(int(row.split('(*)')[1]))    # (打印纸张)方向self.leftVar.set(int(row.split('(*)')[2]))      # (打印纸张)左页边距self.rightVar.set(int(row.split('(*)')[3]))     # (打印纸张)右页边距self.topVar.set(int(row.split('(*)')[4]))       # (打印纸张)上页边距self.bottomVar.set(int(row.split('(*)')[5]))    # (打印纸张)下页边距self.headerVar.set(row.split('(*)')[6])         # (打印纸张)页眉self.footerVar.set(row.split('(*)')[7])         # (打印纸张)页脚# 更新"页面设置"参数的全局变量# (打印纸张)尺寸大小PAPER_VAR = self.paperVar.get()      # (打印纸张)尺寸大小PAPER_ORIENT = self.orientVar.get()  # (打印纸张)方向# (打印纸张)设置页边距(毫米)LEFT_VAR = self.leftVar.get()        # (打印纸张)左页边距RIGHT_VAR = self.rightVar.get()      # (打印纸张)右页边距TOP_VAR = self.topVar.get()          # (打印纸张)上页边距BOTTOM_VAR = self.bottomVar.get()    # (打印纸张)下页边距# (打印纸张)设置页眉页脚HEADER_VAR = self.headerVar.get()    # (打印纸张)页眉FOOTER_VAR = self.footerVar.get()    # (打印纸张)页脚# 右侧预览更新"页面设置"的参数图片(未完成)def pagesetupData(self, event=None):""" 实时更新右侧预览图片 """# 修改右侧预览的(打印)纸张大小图片if self.paperVar.get() == f'A3{" " * 55}':print('预览图片纸张大小:A3')# 更新右侧预览图片else:print(f'预览图片纸张大小:{self.paperVar.get()}')# 更新右侧预览图片# (打印纸张)方向选择if self.orientVar.get() == 1:print('预览图片纸张方向:纵向')# 更新右侧预览图片elif self.orientVar.get() == 2:print('预览图片纸张方向:横向')# 更新右侧预览图片# (打印纸张)设置页边距(毫米)print(f'预览图片页边距:{self.leftVar.get(), self.rightVar.get(), self.topVar.get(), self.bottomVar.get()}')# 更新右侧预览图片# (打印纸张)设置页眉页脚print(f'预览图片页眉/页脚:{self.headerVar.get(), self.footerVar.get()}')# 更新右侧预览图片# 代码测试
if __name__ == '__main__':ui = PageSetup_1()    # 实例化页面设置ui.mainloop()         # 循环窗口运行
else:print(f'导入【{__name__}】')

作者:周华

创作日期:2024/1/12

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

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

相关文章

使用U盘作为系统的启动盘

1.我们使用到的工具ventoy-1.0.96.rar 下载资源 https://download.csdn.net/download/u011442726/88735129 2.怎么使用 ventoy软件的使用非常简单&#xff0c;直接解压后&#xff0c;把u盘插到电脑&#xff0c;然后点击exe这个文件即可。 然后点击之后&#xff0c;直接点击安…

人工智能任务4-读懂YOLOv5模型的几个灵魂拷问问题,深度理解 YOLOv5模型架构

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务4-读懂YOLOv5模型的几个灵魂拷问问题&#xff0c;深度理解 YOLOv5模型架构。YOLOv5是一种高效且精确的目标检测模型&#xff0c;由ultralytics团队开发。它采用了轻量级的网络结构&#xff0c;能够在保…

HDFS概述

文章目录 HDFS背景定义HDFS 优缺点HDFS 组成HDFS文件块大小 HDFS背景定义 背景 先给大家介绍一下什么叫HDFS&#xff0c;我们生活在信息爆炸的时代&#xff0c;随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系统管理的磁…

武汉灰京文化:手游市场正呈现出多元化的发展趋势

移动游戏作为近年来全球范围内备受关注的领域之一&#xff0c;其崛起之迅速令人瞩目。尤其值得注意的是&#xff0c;新兴的细分玩法以及类型多样的游戏产品的出现&#xff0c;已经彻底改变了人们对于移动游戏的认知。在高速增长的移动互联网浪潮推动下&#xff0c;多样化游戏产…

基于LVGL编写的windows串口工具: LCOM

LCOM: Serial Port Tools based on LVGL (PC Software) 一直以来我都想用LVGL做一个真正意义上的PC软件&#xff0c;来验证或者表达LVGL出色的特性&#xff0c;现在我用LCOM做到了&#xff01; LCOM 是一个基于LVGL编写的串口工具&#xff0c;界面简洁&#xff0c;功能出色&a…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题一 理论题

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

iOS xcode 15.1 打包报错

真机调试的时候没问题&#xff0c;打包的时候报错了 #报错 解决办法 pods.xcodeproj - build phases - compile sources - compiler flags pods.xcodeproj - Targets-support files pods-xx-frameworks

国内镜像源配置方法(包括临时和永久方法)

国内镜像源&#xff1a; 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣 http://pypi.douban.com/simplePython官方 https://pypi.python.org/simple/v2ex http://pypi.v2ex.com/simple/中国科学院 http://pypi.mi…

sectigo通配符dv证书400元买一年送1月实际签发13个月

Sectigo就是众多颁发数字证书的CA认证机构之一&#xff0c;旗下的DV通配符SSL证书作为一种加密通信工具&#xff0c;广泛应用于保护网站数据的安全。其中&#xff0c;SectigoDV通配符SSL证书是一种受欢迎的产品&#xff0c;它不仅能够提供强大的加密功能&#xff0c;还可以提高…

SpringBoot 引入分页插件 PageHelper

官网 https://pagehelper.github.io/docs/howtouse/ 引入步骤 第1步&#xff1a;引入依赖 <!--分页插件--> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</vers…

【Git】查看凭据管理器的账号信息,并删除账号,解决首次认证登录失败后无法重新登录的问题

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是是《代码管理工具》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的…

Linux动态分配IP与正向解析DNS

目录 一、DHCP分配 1. 动态分配 1.1 服务端服务安装 1.2 修改服务端dhcp配置 1.3 修改客户端dhcp&#xff0c;重启查询网卡信息 2. 根据mac固定分配 2.1 修改服务器端dhcp服务配置 2.2 客户端自动获取&#xff0c;查看网卡信息 二、时间同步 1. 手动同步 2. 自动同…