当前位置: 首页 > news >正文

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

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

下一篇:

作者发炎

此代码模块是继承上一篇文章的代码模块的基础上开始设计开发的。

如果不知道怎么新建"记事本项目"文件夹,请参考上一篇文章,在此我不在复述。

在本篇文章主要完成了改变编辑区字体大小、右侧上下滑块滑动、底侧左右滑块滑动、显示光标在编辑区的位置、以及底部状态栏显示数据更新。

设计步骤

在"记事本项目"文件夹的"code"目录下新建本文章要设计开发的代码模块文件"记事本功能设计_1.py",如下图:

运行结果

代码示例:记事本功能设计_1.py

"""记事本功能设计不足:1.底部状态栏的字体缩放百分比不是±10%,因为默认10号字体太小了,所以我选择了12号字体大小2.底部状态栏不能识别编辑内容编码格式,所以一直是UTF-8"""# 通配符 "*"
__all__ = ['Notepad_1', 'FONT_SIZE']# 导入内置模块
import tkinter as tk
from tkinter import font# 导入"记事本底座"模块
from 记事本项目.code.记事本底座 import Notepad_base# 全局变量
# 初始化
FONT_SIZE = 12      # 默认字体大小class Notepad_1(Notepad_base):""" 继承Notepad_base, 设计记事本功能 """def __init__(self):""" 重写父类的构造方法 """# 调用父类的构造方法super().__init__()""" 开始对记事本功能进行设计 """# 设置文本域与右侧和底部滚动条关联self.text.config(wrap="word", xscrollcommand=self.bottomScrollbar.set, yscrollcommand=self.rightScrollbar.set)# 底侧滚动条与文本域关联self.bottomScrollbar.config(command=self.text.xview)# 右侧滚动条与文本域关联self.rightScrollbar.config(command=self.text.yview)# 隐藏底侧滚动条(让其默认勾选上自动换行)self.bottomScrollbar.pack_forget()# 设置文本域编辑字体样式,以及字体大小self.fontSize = tk.IntVar(value=FONT_SIZE)self.setFont = font.Font(family='Tahoma', size=self.fontSize.get())self.text.config(font=self.setFont)# 捆绑事件,获取Text文本的光标位置self.text.bind('<KeyPress>', self.cursorPosition)  # 键盘按下触发self.text.bind('<KeyRelease>', self.cursorPosition)  # 键盘释放触发self.text.bind('<ButtonPress>', self.cursorPosition)  # 鼠标按下触发self.text.bind('<ButtonRelease>', self.cursorPosition)  # 鼠标释放触发# 自定义注册事件# self.text.event_add('<<CursorEvent>>', *('<KeyPress>', '<KeyRelease>', '<ButtonPress>', '<ButtonRelease>'))# self.text.bind('<<CursorEvent>>', self.cursorPosition)# 文本域字体大小捆绑事件self.threeViewMenu.entryconfigure(0, command=lambda: self.FontSizeEvent('放大'))self.threeViewMenu.entryconfigure(1, command=lambda: self.FontSizeEvent('缩小'))self.threeViewMenu.entryconfigure(2, command=lambda: self.FontSizeEvent('默认缩放'))# 自定义注册缩放事件('<<ZoomEvent>>')self.event_add('<<ZoomEvent>>',*('<Control-MouseWheel>','<Control-Key-=>','<Control-Key-+>','<Control-minus>','<Control-Key-0>'))# 捆绑自定义注册缩放事件改变字体大小self.bind('<<ZoomEvent>>', self.FontSizeEvent)  # 鼠标上滚缩小,下滚放大# 文本域输入自动换行显隐捆绑事件self.formatMenu.entryconfigure(0, command=self.setWord_wrap)# 文本域底部状态栏显隐捆绑事件self.viewMenu.entryconfigure(1, command=self.setState)# 状态栏:更新字体大小百分比def FontSizeEvent(self, event):# 菜单调整字体大小if event == '放大':self.event_generate('<Control-Key-+>')  # 引起键盘触发事件returnelif event == '缩小':self.event_generate('<Control-minus>')  # 引起键盘触发事件returnelif event == '默认缩放':self.event_generate('<Control-Key-0>')  # 引起键盘触发事件return# 快捷键调整字体大小# 向下滚动if event.delta < 0 or event.keysym == 'minus':# 字体大小范围if self.fontSize.get() <= 1:return# 缩小字体self.fontSize.set(self.fontSize.get() - 1)print('向上滚动,字体大小:', self.fontSize.get())# 向上滚动else:# 字体大小范围if self.fontSize.get() >= FONT_SIZE * 5:return# 放大字体self.fontSize.set(self.fontSize.get() + 1)# 恢复默认缩放if event.keysym == '0':self.fontSize.set(FONT_SIZE)print('向下滚动,字体大小:', self.fontSize.get())# 改变字体大小self.setFont.config(size=self.fontSize.get())# 改变底部显示字体大小百分比self.fontSizeLabel.config(text='{:.0%}'.format(self.fontSize.get() / FONT_SIZE))# 状态栏:获取Text光标位置def cursorPosition(self, event):row, column = event.widget.index("insert").split(".")print("光标位置:行", row, "列", int(column) + 1)self.locationLabel.config(text=f'  第 {row} 行,第 {int(column) + 1} 列')# 勾选自动换行显示与否def setWord_wrap(self, event=None):# 设置自动换行if self.word_wrap.get():# 自动换行设置self.text.config(wrap='word')# 移除底部水平滑动条self.bottomScrollbar.pack_forget()# 底部框架没有组件显示时移除if not self.state.get():self.bottomFrame.pack_forget()# 设置取消自动换行else:# 先移除右侧滚动条,再显示self.rightScrollbar.pack_forget()# 先移除中间文本域,再显示self.text.pack_forget()# 显示底部框架self.bottomFrame.pack(side=tk.BOTTOM, fill='both')# 取消自动换行设置self.text.config(wrap='none')# 显示底部水平滑动条self.bottomScrollbar.pack(fill='both')# 再显示右侧滚动条self.rightScrollbar.pack(side=tk.RIGHT, fill='both')# 再中间文本域self.text.pack(expand=True, fill='both')# 勾选底部状态栏显示与否def setState(self, event=None):# 底部显示状态栏if self.state.get():# 先移除右侧滚动条,再显示self.rightScrollbar.pack_forget()# 先移除中间文本域,再显示self.text.pack_forget()# 显示底部框架self.bottomFrame.pack(side=tk.BOTTOM, fill='both')# 显示状态栏self.stateFrame.pack(side=tk.BOTTOM, fill='both')# 底部移除状态栏else:# 移除状态栏self.stateFrame.pack_forget()# 底部框架没有组件显示时移除if self.word_wrap.get():self.bottomFrame.pack_forget()# 再显示右侧滚动条self.rightScrollbar.pack(side=tk.RIGHT, fill='both')# 再中间文本域self.text.pack(expand=True, fill='both')# 代码测试
if __name__ == '__main__':ui = Notepad_1()    # 实例化记事本UIui.mainloop()       # 循环窗口运行
else:print(f'导入【{__name__}】')

作者:周华

创作日期:2024/1/10

相关文章:

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

上一篇&#xff1a;【Python】使用tkinter设计开发Windows桌面程序记事本&#xff08;1&#xff09;-CSDN博客 下一篇&#xff1a; 作者发炎 此代码模块是继承上一篇文章的代码模块的基础上开始设计开发的。 如果不知道怎么新建"记事本项目"文件夹&#xff0c;请参…...

Flutter DateTime 常用处理

今天介绍一下 DateTime 的一些常用功能&#xff0c;对其进行一个整理。 最近在开发过程中好多时候都会使用到时间方面的方法&#xff0c;心想还是统一处理一下&#xff0c;封装一个管理类&#xff0c;这个类可以满足我们开发过程中常用的时间方法。 今天正好整理了一下&#…...

【uniapp】APP打包上架应用商-注意事项

初雪云-uniapp启动图自定义生成&#xff08;支持一键生成storyboard&#xff09; HBuilderX需要的自定义storyboard文件格式为 " zip压缩包 " 一、“Android” — 设置targetSdkVersion 小米、OPPO、vivo、华为等主流应用商店&#xff0c;将于2023年12月采用 targetS…...

【算法题】43. 字符串相乘

题目 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3…...

CH341 SPI方式烧录BK7231U

CH341是一个USB总线的转接芯片&#xff0c;通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 BK7231U Wi-Fi SOC芯片&#xff0c;内嵌处理器。1. 符合802.11b/g/n 1x1协议 2. 17dBm 输出功率3. 支持20/40 MHz带宽和STBC 4. 支持Wi-Fi STA、AP、…...

sd-webui-EasyPhoto win 安装笔记

目录 安装教程: 插件介绍 ControlNet 1.1 Tile: launch.py问题 依赖库 webui安装问题...

gradient_checkpointing

点评:本质是减少内存消耗的一种方式,以时间或者计算换内存 gradient_checkpointing(梯度检查点)是一种用于减少深度学习模型中内存消耗的技术。在训练深度神经网络时,反向传播算法需要在前向传播和反向传播之间存储中间计算结果,以便计算梯度并更新模型参数。这些中间结…...

回溯算法part05 算法

回溯算法part05 算法 今日任务 491.递增子序列46.全排列47.全排列 II 1.LeetCode 491.递增子序列 https://leetcode.cn/problems/non-decreasing-subsequences/description/ class Solution {List<List<Integer>> resultnew ArrayList<>();List<Inte…...

阿里云系统盘测评ESSD、SSD和高效云盘IOPS、吞吐量性能参数表

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…...

RK3568平台开发系列讲解(Linux系统篇)Linux 内核打印

🚀返回总目录 文章目录 一、方法一:dmseg 命令二、方法二:查看 kmsg 文件三、方法三:调整内核打印等级一、方法一:dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所示: 首先在串口终端使用 “dmseg”命令,可以看见相应的内核打印信息…...

迁移学习的最新进展和挑战

随着深度学习和人工智能技术的飞速发展&#xff0c;迁移学习作为一种有效的机器学习方法&#xff0c;已经在各个领域取得了显著的成果。迁移学习是指将一个领域&#xff08;源领域&#xff09;的知识应用到另一个领域&#xff08;目标领域&#xff09;&#xff0c;以提高目标领…...

Python基础(二十二、自定义模块和包)

文章目录 一、自定义模块1.如何自定义模块并导入?2.__main__变量的功能3.注意事项 二、自定义包1.什么是Python的包?2.__init __.py文件的作用?3.__all__变量的作用?4.示例 三、自定义模块和自定义包的好处 一、自定义模块 1.如何自定义模块并导入? 在Python代码文件中正…...

C#-数组

数组 (array) 是一种包含若干变量的数据结构&#xff0c;这些变量都可以通过计算索引进行访问。数组中包含的变量&#xff08;又称数组的元素&#xff09;具有相同的类型&#xff0c;该类型称为数组的元素类型。 数组类型为引用类型&#xff0c;因此数组变量的声明只是为数组实…...

机器学习周刊第二期:300个机器学习应用案例集

大家好 前文&#xff1a;机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址&#xff1a;https://github.com/Asabeneh/30-Days-Of-Python 30天Python编程挑战是一个逐步学…...

【华为OD机试真题2023CD卷 JAVAJS】中文分词模拟器

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 中文分词模拟器 知识点图字符串 时间限制:5s 空间限制:256MB 限定语言:不限 题目描述: 给定一个连续不包含空格字符串,该字符串仅包含英文小写字母及英文文标点符号(逗号、分号、句号),同时给定词库,对该字符串进…...

基于YOLOv8-pose的画笔关键点(bic_markers)检测

💡💡💡本文解决什么问题:教会你如何用自己的数据集训练Yolov8-pose关键点检测 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_12398833.html ✨✨✨手把手教你从数据标记到生成适合Yolov8-pose的yolo数据集;...

【实用技巧】Windows 电脑向iPhone或iPad传输视频方法1:无线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频&#xff0c;以 iPhone 为例&#xff0c;iPad的操作方法类似&#xff0c;本文不作赘述。 二、所需原材料 Windows 电脑&#xff08;桌面或其它文件夹中存有要导入的视频&#xff09;、iPhone 14。 待…...

爬虫实战 - 微博评论数据可视化

简介&#xff1a; 我们都知道在数据比较少的情况下&#xff0c;我们是可以很轻易的获取到数据中的信息。但是当数据比较庞大的时候呢&#xff0c;我们就很难看出来了。尤其是面对现如今数以万计的数据&#xff0c;就更了。 不过好在我们可以通过计算机来帮我们进行分析&#…...

python装饰器嵌套基础

1 python装饰器嵌套基础 python支持装饰器嵌套&#xff0c;即多个装饰器装饰同一个函数或方法。 1.1 嵌套执行顺序 用法 a_deco b_deco c_deco def test_nest_deco():pass描述 a_deco、b_deco、c_deco分别占一行&#xff0c;编写在同一个函数或方法的def语句上方。 从def…...

C语言之三子棋小游戏的应用

文章目录 前言一、前期准备模块化设计 二、框架搭建三、游戏实现打印棋盘代码优化玩家下棋电脑下棋判断输赢 四、结束 前言 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...