使用Tkinter创建带查找功能的文本编辑器

使用Tkinter创建带查找功能的文本编辑器

  • 介绍
  • 效果
  • 代码解析
    • 创建主窗口
    • 添加菜单栏
    • 实现文件操作
    • 实现查找
  • 完整代码

介绍

在这篇博客中,我将分享如何使用Python的Tkinter库创建一个带有查找功能的简单文本编辑器

效果

在这里插入图片描述

代码解析

创建主窗口

import tkinter as tkclass TextEditor(tk.Tk):def __init__(self):super().__init__()self.title("带查找功能的文本编辑器")self.geometry("800x600")self.text_area = tk.Text(self, wrap='word')self.text_area.pack(expand=1, fill='both')if __name__ == "__main__":app = TextEditor()app.mainloop()

添加菜单栏

class TextEditor(tk.Tk):def __init__(self):super().__init__()self.title("带查找功能的文本编辑器")self.geometry("800x600")self.text_area = tk.Text(self, wrap='word')self.text_area.pack(expand=1, fill='both')self.menu = tk.Menu(self)self.config(menu=self.menu)self.file_menu = tk.Menu(self.menu, tearoff=0)self.menu.add_cascade(label="文件", menu=self.file_menu)self.file_menu.add_command(label="新建", command=self.new_file)self.file_menu.add_command(label="打开", command=self.open_file)self.file_menu.add_command(label="保存", command=self.save_file)self.file_menu.add_separator()self.file_menu.add_command(label="退出", command=self.exit_app)self.edit_menu = tk.Menu(self.menu, tearoff=0)self.menu.add_cascade(label="编辑", menu=self.edit_menu)self.edit_menu.add_command(label="查找", command=self.find_text)

实现文件操作

from tkinter import filedialogclass TextEditor(tk.Tk):# ...(之前的代码)def new_file(self):self.text_area.delete(1.0, tk.END)def open_file(self):file_path = filedialog.askopenfilename(defaultextension=".txt", filetypes=[("所有文件", "*.*"), ("文本文件", "*.txt")])if file_path:with open(file_path, "r") as file:self.text_area.delete(1.0, tk.END)self.text_area.insert(tk.END, file.read())def save_file(self):file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("所有文件", "*.*"), ("文本文件", "*.txt")])if file_path:with open(file_path, "w") as file:file.write(self.text_area.get(1.0, tk.END))def exit_app(self):self.quit()

实现查找

from tkinter import simpledialog, messageboxclass TextEditor(tk.Tk):# ...(之前的代码)def find_text(self):search_string = simpledialog.askstring("查找", "输入要查找的文本:")if search_string:start_pos = '1.0'while True:start_pos = self.text_area.search(search_string, start_pos, stopindex=tk.END)if not start_pos:messagebox.showinfo("查找", "未找到更多结果。")breakend_pos = f"{start_pos}+{len(search_string)}c"self.text_area.tag_add("highlight", start_pos, end_pos)self.text_area.tag_config("highlight", background="yellow")start_pos = end_posif __name__ == "__main__":app = TextEditor()app.mainloop()

完整代码

import tkinter as tk
from tkinter import simpledialog, messageboxclass TextEditor(tk.Tk):def __init__(self):super().__init__()self.title("带查找功能的文本编辑器")self.geometry("800x600")self.text_area = tk.Text(self, wrap='word')self.text_area.pack(expand=1, fill='both')self.menu = tk.Menu(self)self.config(menu=self.menu)self.file_menu = tk.Menu(self.menu, tearoff=0)self.menu.add_cascade(label="文件", menu=self.file_menu)self.file_menu.add_command(label="新建", command=self.new_file)self.file_menu.add_command(label="打开", command=self.open_file)self.file_menu.add_command(label="保存", command=self.save_file)self.file_menu.add_separator()self.file_menu.add_command(label="退出", command=self.exit_app)self.edit_menu = tk.Menu(self.menu, tearoff=0)self.menu.add_cascade(label="编辑", menu=self.edit_menu)self.edit_menu.add_command(label="查找", command=self.find_text)def new_file(self):self.text_area.delete(1.0, tk.END)def open_file(self):file_path = tk.filedialog.askopenfilename(defaultextension=".txt",filetypes=[("所有文件", "*.*"), ("文本文件", "*.txt")])if file_path:with open(file_path, "r") as file:self.text_area.delete(1.0, tk.END)self.text_area.insert(tk.END, file.read())def save_file(self):file_path = tk.filedialog.asksaveasfilename(defaultextension=".txt",filetypes=[("所有文件", "*.*"), ("文本文件", "*.txt")])if file_path:with open(file_path, "w") as file:file.write(self.text_area.get(1.0, tk.END))def exit_app(self):self.quit()def find_text(self):search_string = simpledialog.askstring("查找", "输入要查找的文本:")if search_string:start_pos = '1.0'while True:start_pos = self.text_area.search(search_string, start_pos, stopindex=tk.END)if not start_pos:messagebox.showinfo("查找", "未找到更多结果。")breakend_pos = f"{start_pos}+{len(search_string)}c"self.text_area.tag_add("highlight", start_pos, end_pos)self.text_area.tag_config("highlight", background="yellow")start_pos = end_posif __name__ == "__main__":app = TextEditor()app.mainloop()

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

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

相关文章

Offset Explorer 连接SASL PLAIN鉴权的Kafka

1、填写Kafka信息 2、配置鉴权信息 Security 选择 SASL PLAINTEXT JAAS Config 配置账号密码 org.apache.kafka.common.security.plain.PlainLoginModule required username"账号"password"密码";

[Vulnhub] Troll FTP匿名登录+定时任务权限提升

信息收集 IP AddressPorts Opening192.168.8.104TCP:21,22,80 $ nmap -sC -sV 192.168.8.104 -p- --min-rate 1000 Nmap scan report for 192.168.8.104 (192.168.8.104) Host is up (0.0042s latency). Not shown: 65532 closed tcp ports (conn-refused) PORT STATE SER…

openh264 宏块级码率控制源码分析

openh264 宏块级码率控制函数关系 宏块级核心函数分析 WelsRcMbInitGom函数 功能:openh264 码率控制框架中宏块级码率控制函数,根据是否启用GOM QP来决定如何设置宏块的QP值,以控制编码的质量和比特率。原理过程: 函数参数&…

“打造智能售货机系统,基于ruoyi微服务版本开源项目“

目录 # 开篇 售货机术语 1. 表设计说明 2. 页面展示 2.1 区域管理页面 2.2 合作商管理页面 2.3 点位管理页面 3. 建表资源 3.1 创建表的 SQL 语句(包含字段备注) 1. Region 表 2. Node 表 3. Partner 表 4. 创建 tb_vending_machine 表的 S…

【启明智显产品介绍】Model3C工业级HMI芯片详解专题(一)芯片性能

【启明智显产品介绍】工业级HMI芯片Model3C详解(一)芯片性能 Model3C 是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU,配置平头哥E907,主频400MHz,强大的 2D 图形加速处理器、PNG/JPEG 解码引擎…

【Conda】修改 Conda 默认的虚拟环境位置

文章目录 问题描述分析与解决查看默认安装位置修改 .condarc 文件修改权限 参考资料 问题描述 Conda 的虚拟环境默认安装在 C 盘。时间久了,C 盘上的内存会被大量占用,影响电脑性能。于是想到修改虚拟环境的默认存放位置,改到自定义的位置。…

找不到d3dx9_43.dll无法继续执行代码的几种解决方法

在工作或生活使用电脑都会遇到丢失dll文件应用无法启动的情况,比如你安装完一款你最喜欢的游戏在启动的时候提示系统缺少d3dx9_39.dll、d3dx9_40.dll、d3dx9_41.dll、d3dx9_42.dll、d3dx9_43.dll、xinput1_3.dll 文件而无法正常游戏,或你在工作的时候安装…

分享HTML显示2D/3D时间

效果截图 实现代码 <!DOCTYPE html> <head> <title>three.jscannon.js Web 3D</title><meta charset"utf-8"><meta name"viewport" content"widthdevice-width,initial-scale1,maximum-scale1"><meta n…

图神经网络学习笔记

文章目录 一、图神经网络应用领域分析二、图基本模块定义三、邻接矩阵的定义四、GNN中常见任务五、消息传递计算方法六、多层GCN的作用七、GCN基本模型概述八、图卷积的基本计算方法九、邻接的矩阵的变换十、GCN变换原理解读 本笔记参考自b站up主小巴只爱学习的图神经网络教程 …

创建OpenWRT虚拟机

环境&#xff1a;Ubuntu 2204&#xff0c;VM VirtualBox 7.0.18 安装必备软件包&#xff1a; sudo apt update sudo apt install subversion automake make cmake uuid-dev gcc vim build-essential clang flex bison g gawk gcc-multilib g-multilib gettext git libncurses…

C语言中操作符详解(一)

众所周知&#xff0c;在我们的C语言中有着各式各样的操作符&#xff0c;并且在此之前呢&#xff0c;我们已经认识并运用了许许多多的操作符&#xff0c;都是诸君的老朋友了昂 操作符作为我们使用C语言的一个非常非常非常重要的工具&#xff0c;诸君一定要加以重视&#xff0c;…

大模型如何改变世界?李彦宏:未来至少一半人要学会“提问题“

2023年爆火的大模型&#xff0c;对我们来说意味着什么&#xff1f; 百度创始人、董事长兼CEO李彦宏认为&#xff0c;“大模型即将改变世界。” 5月26日&#xff0c;李彦宏参加了在北京举办的2023中关村论坛&#xff0c;发表了题为《大模型改变世界》的演讲。李彦宏认为&#…

为什么我在 PostgreSQL 中 Commit 很慢?

有时&#xff0c;我们的一位客户会查看数据库中最耗时的语句&#xff08;使用pg_stat_statements或pgBadger&#xff09;&#xff0c;并发现COMMIT排名靠前。通常&#xff0c;COMMIT这是 PostgreSQL 中非常快的语句&#xff0c;因此值得研究。在本文中&#xff0c;我将探讨速度…

Go微服务: redis分布式锁在集群中可能遇到的问题及其解决方案

概述 我们的 redis 一般都是集群来给我们程序提供服务的&#xff0c;单体的redis现在也不多见 看到上面是主节点redis和下面是6个重节点redis&#xff0c;主节点和重节点的通讯都是畅通没问题的这个时候&#xff0c;我们有 gorouting 写我们的数据&#xff0c;那它就会用到我们…

(Python)可变类型不可变类型;引用传递值传递;浅拷贝深拷贝

从一段代码开始说事&#xff0c;先上代码&#xff1a; a [[1],[2],[3]] b [[4,5],[6,7],[7,8]] for i,j in zip(a,b):print(i,j)i [9]#i[0] 8j[:2][1,2]print(i, j) print(a) print(b) 运行的结果&#xff1a; [1] [4, 5] [9] [1, 2] [2] [6, 7] [9] [1, 2] [3] [7, 8] …

Homebrew使用

官网&#xff1a;https://brew.sh/ 安装&#xff1a; 简介&#xff1a;https://www.jianshu.com/p/f4c9cf0733ea 比如&#xff0c;安装maven: 1、brew install maven 2、查看安装路径&#xff1a;brew list maven 具体参考&#xff1a;https://blog.csdn.net/m0_67402970/arti…

MPLS-LDP(个人学习笔记)

定义 标签分发协议LDP&#xff08;Label Distribution Protocol&#xff09;是多协议标签交换MPLS的一种控制协议&#xff0c;负责转发等价类FEC的分类、标签的分配以及标签交换路径LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程 术语 LDP会话&a…

【尚庭公寓SpringBoot + Vue 项目实战】移动端找房功能(二十一)

【尚庭公寓SpringBoot Vue 项目实战】移动端找房功能&#xff08;二十一&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端找房功能&#xff08;二十一&#xff09;1、业务介绍2、接口开发2.1、地区信息2.2、获取全部支付方式列表2.3、房间信息2.2.1. 根据条…

python基础1.1-格式化输出(%用法和format用法)

目录 %用法 format用法 %用法 1、整数的输出 %o —— oct 八进制 %d —— dec 十进制 %x —— hex 十六进制 1 >>> print(%o % 20) 2 24 3 >>> print(%d % 20) 4 20 5 >>> print(%x % 20) 6 142、浮点数输出 &#xff08;1&#xff09;格式化…

鸿蒙开发系统基础能力:【@ohos.accessibility (辅助功能)】

辅助功能 说明&#xff1a; 本模块首批接口从 API version 7 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import accessibility from ohos.accessibility;AbilityState 辅助应用状态类型。 系统能力&#xff1a;以下各项对应的…