私活儿分享
` 使用python的tkinter开发文本替换器软件
前言
前段时间,有个客户找我,说要做个文本替换的工具,具体是预定义好编号和对应的文字,然后在一段文字中(含编号),用文字替换对应的编号(但是编号仍然保留)。需求不难,我决定使用python的tkinter技术实现,正好桌面软件也符合他的使用场景。
正文
绘制两个文本区,一个用于定义编号和文字,一个用于输入待替换的文本。然后点击“一键替换”,进行编号替换就行了。主要分为两个部分,一个画界面,一个写替换逻辑。
替换后的效果如下
感兴趣的小伙伴,可以研究下代码😁😁。整体比较简单。安装下ttkbootstrap应该就可以运行了,需用打包成exe的,最后再用pyinstaller打包下即可。
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
from tkinter.scrolledtext import ScrolledText
import re
class TextReader(ttk.Frame):
def __init__(self, master):
super().__init__(master, padding=15)
self.rule = ttk.StringVar() # 输入的规则
self.imp_text = ttk.StringVar() # 待替换的文本
self.pack(fill=BOTH, expand=YES)
self.create_rule_textarea()
self.create_text_textarea()
self.create_btn()
# 创建规则的文本域
def create_rule_textarea(self):
"""Create and add the widget elements"""
style = ttk.Style()
self.rule_textbox = ScrolledText(
master=self,
highlightcolor=style.colors.primary,
highlightbackground=style.colors.border,
highlightthickness=1,
height=5,width=100
)
self.rule_textbox.grid(row=1, column=1,pady=10)
# 创建待替换的文本的文本域
def create_text_textarea(self):
"""Create and add the widget elements"""
style = ttk.Style()
self.imp_text_textbox = ScrolledText(
master=self,
highlightcolor=style.colors.primary,
highlightbackground=style.colors.border,
highlightthickness=1,
height=35,width=100
)
self.imp_text_textbox.grid(row=2, column=1,pady=10)
def create_btn(self):
browse_btn = ttk.Button(self, text="一键替换", command=self.replace_text,width=50,bootstyle="primary")
browse_btn.grid(row=3, column=1)
def replace_text(self):
rule = self.rule_textbox.get('1.0',END)
rule_map = self.get_rule_map(rule)
imp_text = self.imp_text_textbox.get('1.0',END)
result = re.sub(r'\((\d+)\)', lambda m: self.deal_match_text(m,rule_map), imp_text, 0)
self.imp_text_textbox.delete('1.0', END) #清空文本框
self.imp_text_textbox.insert(END, result)
def get_rule_map(self,rule):
rule_arr = rule.split(";")
rule_map = {}
rule_pattern = re.compile(r'(\d+)、(.*)')
for rule_text in rule_arr:
re_content = re.match(rule_pattern,rule_text)
if re_content!=None:
key = re_content.group(1)
val = re_content.group(2)
rule_map[key] = val
return rule_map
def deal_match_text(self,m,rule_map):
origin_text = m.group(0)
num = m.group(1)
val = ''
try:
val = rule_map[num]
except:
pass
return val+origin_text
if __name__ == '__main__':
app = ttk.Window("文本替换器", "sandstone")
TextReader(app)
app.mainloop()
总结
以上就是我分享的实战项目,感兴趣的小伙伴可以点个关注,客户不同,需求也不同,代码有难有易,遇到的问题也偏向实战。最后给大家安利一个分发福利的公众号【好券菌】,点外卖、看电影、打车、寄快递、全网vip会员均比正常渠道便宜。