You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter文本翻译工具开发求助:实现结果输出至只读文本框

字符/词组翻译工具Tkinter版本问题修正

问题排查

原代码存在以下几个关键问题:

  • 替换逻辑错误:循环中每次都直接读取Text1的原始文本进行替换,而非基于上一次替换后的结果迭代处理,最终仅最后一个字典条目替换生效。
  • 缺失大写转换:未复刻命令行版本的upper()转换,输入小写字符时无法匹配字典中的大写键。
  • 只读文本框操作限制:Text2设置为DISABLED状态后无法直接插入内容,需临时切换状态。
  • 结果未清空:重复点击按钮时新结果会追加到旧内容后,未重置文本框。

修正后的代码

import re
from tkinter import *

raiz = Tk()
raiz.title("Conversor Textos")
raiz.resizable(0, 0)

miFrame = Frame()
miFrame.pack(side="bottom")

Text1 = Text(miFrame, width=40, height=15, font=("Arial", 16))
Text1.grid(row=4, column=1, padx=10, pady=10)

Text2 = Text(miFrame, width=40, height=15, font=("Arial", 16))
Text2.config(state=DISABLED)
Text2.grid(row=4, column=4, padx=10, pady=10)

myDicc = {"AB": "Hello", "ET": "Beer", "OX": "Travel", "4BA2": "Car"}

def codButton():
    # 获取输入文本并转换为大写,对齐命令行版本逻辑
    input_text = Text1.get("1.0", END).strip().upper()
    # 初始化结果为输入文本,迭代执行替换
    result_text = input_text
    for key, value in myDicc.items():
        result_text = re.sub(key, value, result_text)
    
    # 临时启用Text2编辑状态,清空旧内容后插入新结果,再恢复只读
    Text2.config(state=NORMAL)
    Text2.delete("1.0", END)
    Text2.insert("1.0", result_text)
    Text2.config(state=DISABLED)

TxtButton = Button(miFrame, text="Translate", command=codButton)
TxtButton.grid(row=5, column=1, pady=20)

raiz.mainloop()

修改说明

  1. 修复替换逻辑:将输入文本赋值给临时变量result_text,每次循环基于该变量迭代替换,实现所有字典条目依次转换。
  2. 添加大写转换:用upper()处理输入文本,确保和命令行版本的匹配规则一致。
  3. 适配只读文本框:插入结果前将Text2切换为可编辑状态,完成操作后恢复只读,同时清空原有内容避免结果叠加。

内容的提问来源于stack exchange,提问作者Isidoro Plasencia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:50:34