吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10777|回复: 226
收起左侧

[原创工具] Windows上的文本处理工具 v1.1

    [复制链接]
s520z 发表于 2025-4-14 22:11
本帖最后由 s520z 于 2025-4-19 22:02 编辑

wenbenchuli6.png
自制文本处理工具,有时候会用到这些小功能,需要经常进网页进行转换,感到太麻烦了,索性就集成到软件里。


可以自由导入和导出,有搜索和替换功能、有浅色和深色模式。
包含 MD5加密、大小写转换、繁体简体转换、文字转拼音、数字转大写等功能


下载
https://pan.baidu.com/s/1iLolIIhwO5oY_nfIkIs6Zw?pwd=5kiu

https://pan.quark.cn/s/514345951b79

https://pan.xunlei.com/s/VONo_ZS24HQ7rp9zjDDRGwOxA1?pwd=s8ph#

from tkinter import *
from ttkbootstrap import Style
import hashlib
import opencc
import pypinyin

class TextProcessor:
    def __init__(self):
        self.style = Style(theme='cosmo')
        self.window = self.style.master
        self.window.title('文本处理工具')
        self.window.geometry('800x600')
        self.create_widgets()
        self.setup_drag_drop()

    def create_widgets(self):
        # 创建顶部菜单栏
        self.menubar = Menu(self.window)
        self.window.config(menu=self.menubar)

        # 文件菜单
        self.file_menu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label='文件', menu=self.file_menu)
        self.file_menu.add_command(label='导入文件', command=self.import_file)
        self.file_menu.add_command(label='导出文件', command=self.export_file)

        # 编辑菜单
        self.edit_menu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label='编辑', menu=self.edit_menu)
        self.edit_menu.add_command(label='文本搜索', command=self.text_search)
        self.edit_menu.add_command(label='文本替换', command=self.text_replace)

        # 主题菜单
        self.theme_menu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label='主题', menu=self.theme_menu)
        self.theme_menu.add_command(label='深色模式', command=lambda: self.change_theme('darkly'))
        self.theme_menu.add_command(label='浅色模式', command=lambda: self.change_theme('cosmo'))

        # 关于菜单
        self.about_menu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label='关于', menu=self.about_menu)
        self.about_menu.add_command(label='关于软件', command=self.show_about)

        # 左侧功能区
        self.left_frame = Frame(self.window, width=200, bg='#f0f0f0', padx=10, pady=10, relief=GROOVE, bd=2)
        self.left_frame.pack(side=LEFT, fill=Y)

        # 中央主区域
        self.main_frame = Frame(self.window, padx=10, pady=10)
        self.main_frame.pack(side=LEFT, fill=BOTH, expand=True)

        # 输入文本框
        self.input_text = Text(self.main_frame, wrap='word')
        self.input_text.pack(fill='both', expand=True)

        # 输出文本框
        self.output_text = Text(self.main_frame, wrap='word')
        self.output_text.pack(fill='both', expand=True)

        # 添加功能按钮到左侧
        self.add_buttons()

    def add_buttons(self):
        # 添加功能按钮到左侧功能区
        self.buttons = {}
        button_names = ['MD5加密', '大写转换', '小写转换', '首字母大写', '简体转繁体', '繁体转简体', '汉字转拼音', '格式清理', '文本统计', '数字转中文', '中文转大写']
        button_commands = [self.md5_hash, self.to_upper, self.to_lower, self.to_title, self.to_traditional, 
                          self.to_simplified, self.to_pinyin, self.clean_format, self.text_statistics, 
                          self.number_to_chinese, self.chinese_to_uppercase]

        for name, cmd in zip(button_names, button_commands):
            btn = Button(self.left_frame, text=name, command=cmd, 
                        activebackground='#555555', 
                        relief='groove', 
                        bd=2, 
                        font=('Microsoft YaHei', 10))
            btn.pack(pady=5)
            self.buttons[name] = btn

            # 绑定点击事件
            btn.bind('<Button-1>', lambda e, b=btn: self.highlight_button(b))

    def to_upper(self):
        input_text = self.get_input_text()
        self.show_output_text(input_text.upper())

    def to_lower(self):
        input_text = self.get_input_text()
        self.show_output_text(input_text.lower())

    def to_title(self):
        input_text = self.get_input_text()
        self.show_output_text(input_text.title())

    def to_traditional(self):
        converter = opencc.OpenCC('s2t.json')
        input_text = self.get_input_text()
        traditional_text = converter.convert(input_text)
        self.show_output_text(traditional_text)

    def to_simplified(self):
        converter = opencc.OpenCC('t2s.json')
        input_text = self.get_input_text()
        simplified_text = converter.convert(input_text)
        self.show_output_text(simplified_text)

    def to_pinyin(self):
        input_text = self.get_input_text()
        pinyin_text = ' '.join(pypinyin.lazy_pinyin(input_text))
        self.show_output_text(pinyin_text)

    def highlight_match(self):
        self.input_text.tag_remove('highlight', '1.0', 'end')
        pos = self.matches[self.current_match]
        self.input_text.tag_add('highlight', f'1.0+{pos}c', f'1.0+{pos + len(self.pattern_entry.get())}c')
        self.input_text.tag_config('highlight', background='yellow')
        self.input_text.see(f'1.0+{pos}c')

    def highlight_button(self, button):
        # 重置所有按钮样式
        for btn in self.buttons.values():
            btn.config(relief='groove')
        # 高亮当前选中的按钮
        button.config(relief='sunken')

    def text_search(self):
        from tkinter import simpledialog
        import re
        dialog = Toplevel(self.window)
        dialog.title('文本搜索')
        dialog.geometry('400x250')

        Label(dialog, text='搜索模式:').pack()
        self.pattern_entry = Entry(dialog)
        self.pattern_entry.pack()

        self.current_match = 0
        self.matches = []

        def do_search():
            input_text = self.get_input_text()
            pattern = self.pattern_entry.get()
            if pattern:
                self.matches = [m.start() for m in re.finditer(pattern, input_text)]
                self.current_match = 0
                if self.matches:
                    self.highlight_match()

        def next_match():
            if self.matches:
                self.current_match = (self.current_match + 1) % len(self.matches)
                self.highlight_match()

        Button(dialog, text='搜索', command=do_search).pack()
        Button(dialog, text='下一个', command=next_match).pack()

    def text_replace(self):
        from tkinter import simpledialog
        import re
        dialog = Toplevel(self.window)
        dialog.title('文本替换')
        dialog.geometry('400x300')

        Label(dialog, text='搜索模式:').pack()
        pattern_entry = Entry(dialog)
        pattern_entry.pack()

        Label(dialog, text='替换内容:').pack()
        replace_entry = Entry(dialog)
        replace_entry.pack()

        def do_replace():
            input_text = self.get_input_text()
            pattern = pattern_entry.get()
            replacement = replace_entry.get()
            if pattern and replacement:
                result = re.sub(pattern, replacement, input_text)
                self.show_output_text(result)
            dialog.destroy()

        Button(dialog, text='替换', command=do_replace).pack()

    def change_theme(self, theme_name):
        self.style = Style(theme=theme_name)
        self.window = self.style.master
        self.window.title('文本处理工具')
        self.window.geometry('800x600')

    def show_about(self):
        about_text = "文本处理软件\n版本: 1.0\n作者: Ken\n功能: 提供多种文本处理功能"
        from tkinter import messagebox
        messagebox.showinfo("关于", about_text)

    def clean_format(self):
        input_text = self.get_input_text()
        cleaned_text = '\n'.join([line.strip() for line in input_text.splitlines() if line.strip()])
        self.show_output_text(cleaned_text)

    def text_statistics(self):
        input_text = self.get_input_text()
        char_count = len(input_text)
        word_count = len(input_text.split())
        line_count = len(input_text.splitlines())
        stats = f'字符数: {char_count}\n单词数: {word_count}\n行数: {line_count}'
        self.show_output_text(stats)

    def md5_hash(self):
        input_text = self.get_input_text()
        hash_object = hashlib.md5(input_text.encode())
        self.show_output_text(hash_object.hexdigest())

    def get_input_text(self):
        return self.input_text.get('1.0', 'end-1c')

    def show_output_text(self, text):
        self.output_text.delete('1.0', 'end')
        self.output_text.insert('1.0', text)

    def export_file(self):
        from tkinter import filedialog
        file_path = filedialog.asksaveasfilename(
            defaultextension='.txt',
            filetypes=[('Text files', '*.txt')]
        )
        if file_path:
            try:
                with open(file_path, 'w', encoding='utf-8') as file:
                    content = self.output_text.get('1.0', 'end-1c')
                    file.write(content)
            except Exception as e:
                from tkinter import messagebox
                messagebox.showerror("错误", f"导出失败: {str(e)}")

    def import_file(self):
        from tkinter import filedialog
        file_path = filedialog.askopenfilename(filetypes=[('Text files', '*.txt')])
        if file_path:
            with open(file_path, 'r', encoding='utf-8') as file:
                content = file.read()
                self.input_text.delete('1.0', 'end')
                self.input_text.insert('1.0', content)

    def setup_drag_drop(self):
        def handle_drop(event):
            file_path = event.data.strip('{}')
            if file_path.lower().endswith('.txt'):
                with open(file_path, 'r', encoding='utf-8') as file:
                    content = file.read()
                    self.input_text.delete('1.0', 'end')
                    self.input_text.insert('1.0', content)
            else:
                from tkinter import messagebox
                messagebox.showerror("错误", "只支持导入TXT文件!")

        # 使用tkinterdnd2的替代方法注册拖放目标

    def number_to_chinese(self):
        num_map = {'0':'零', '1':'一', '2':'二', '3':'三', '4':'四', 
                  '5':'五', '6':'六', '7':'七', '8':'八', '9':'九'}
        input_text = self.get_input_text()
        if not input_text.isdigit():
            from tkinter import messagebox
            messagebox.showerror("错误", "输入必须为数字!")
            return
        result = ''.join([num_map[c] for c in input_text])
        self.show_output_text(result)

    def chinese_to_uppercase(self):
        digit_map = {'0':'零', '1':'壹', '2':'贰', '3':'叁', '4':'肆', 
                    '5':'伍', '6':'陆', '7':'柒', '8':'捌', '9':'玖'}
        lower_map = {'零':'零', '一':'壹', '二':'贰', '三':'叁', '四':'肆', 
                    '五':'伍', '六':'陆', '七':'柒', '八':'捌', '九':'玖'}
        upper_map = {'零':'零', '壹':'壹', '贰':'贰', '叁':'叁', '肆':'肆', 
                    '伍':'伍', '陆':'陆', '柒':'柒', '捌':'捌', '玖':'玖'}
        input_text = self.get_input_text()
        valid_chars = set('零一二三四五六七八九壹贰叁肆伍陆柒捌玖0123456789')
        if not all(c in valid_chars for c in input_text):
            from tkinter import messagebox
            messagebox.showerror("错误", "输入必须为中文数字或阿拉伯数字!")
            return
        # 先转换阿拉伯数字为中文数字
        converted_text = ''.join([digit_map.get(c, c) for c in input_text])
        # 再转换中文数字为大写
        result = ''.join([upper_map.get(c, lower_map.get(c, c)) for c in converted_text])
        self.show_output_text(result)

    def run(self):
        self.window.mainloop()

if __name__ == '__main__':
    app = TextProcessor()
    app.run()

免费评分

参与人数 44吾爱币 +45 热心值 +39 收起 理由
xiaohan0223 + 1 + 1 我很赞同!
jsyczxyh + 1 + 1 热心回复!
guoruihotel + 1 + 1 谢谢@Thanks!
yxpp + 1 谢谢@Thanks!
jinronghuan + 1 + 1 谢谢@Thanks!
JUNWO999 + 1 + 1 谢谢@Thanks!
z1017 + 1 热心回复!
radar12345 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
woaigaoqing + 1 + 1 谢谢@Thanks!
Lingjohnny + 1 热心回复!
yaan + 1 + 1 热心回复!
无尘浪子 + 1 谢谢@Thanks!
开心熊猫741 + 1 + 1 我很赞同!
daxz + 1 + 1 谢谢@Thanks!
hdfskycat + 1 + 1 谢谢@Thanks!
after000 + 1 + 1 热心回复!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
laobj + 2 谢谢@Thanks!
sam喵喵 + 1 感谢分享,能不能加个Unicode和中文互转
lovepluto6 + 1 + 1 热心回复!
52zb + 1 + 1 谢谢@Thanks!
mhaitao + 1 + 1 我很赞同!
YYL7535 + 1 + 1 谢谢@Thanks!
grrr_zhao + 1 + 1 谢谢@Thanks!
caihuachaorou87 + 1 + 1 谢谢@Thanks!
kbhu + 1 我很赞同!
Hegemonism + 1 用心讨论,共获提升!
sdfg67 + 1 谢谢@Thanks!
策士 + 1 热心回复!
675476 + 1 + 1 我很赞同!
tunis + 1 + 1 我很赞同!
powehi + 1 + 1 谢谢@Thanks!
chinabrz + 1 + 1 谢谢@Thanks!
bxyhy + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ijarod + 1 + 1 我很赞同!
soenluzy + 1 + 1 谢谢@Thanks!
Mariner + 1 + 1 谢谢@Thanks!
airzen + 1 + 1 谢谢@Thanks!
xlqdd + 1 + 1 谢谢@Thanks!
loskr + 1 + 1 我很赞同!
wuwei227 + 1 + 1 热心回复!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
兮兮曦 + 1 + 1 谢谢@Thanks!
忆江南 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

shoe120 发表于 2025-4-15 17:12
123.23就没法数字转中文了。
focus009 发表于 2025-4-15 12:47
maya123 发表于 2025-4-14 22:31
soojing 发表于 2025-4-14 22:35
羡慕会自己写程序的小伙伴
ymzcmysw 发表于 2025-4-14 22:37
看着代码好像ptyhon  
BrutusScipio 发表于 2025-4-14 23:10
一眼看过去没有识别编码的功能哎,确定都兼容吗?
fuzzylogic 发表于 2025-4-14 23:48
用python编软件,界面一言难尽
husay 发表于 2025-4-15 00:48
是不是绿色免安装的,现在用的软件工具不想安装
 楼主| s520z 发表于 2025-4-15 01:03
husay 发表于 2025-4-15 00:48
是不是绿色免安装的,现在用的软件工具不想安装

点击即可用
 楼主| s520z 发表于 2025-4-15 01:04
ymzcmysw 发表于 2025-4-14 22:37
看着代码好像ptyhon

把 "好像" 去掉
 楼主| s520z 发表于 2025-4-15 01:05
BrutusScipio 发表于 2025-4-14 23:10
一眼看过去没有识别编码的功能哎,确定都兼容吗?

什么意思?没懂。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-20 12:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表