【私活儿分享】使用python的tkinter开发文本替换工具

私活儿分享

` 使用pythontkinter开发文本替换器软件



前言

  前段时间,有个客户找我,说要做个文本替换的工具,具体是预定义好编号和对应的文字,然后在一段文字中(含编号),用文字替换对应的编号(但是编号仍然保留)。需求不难,我决定使用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会员均比正常渠道便宜。
公众号菜单
公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值