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()
修改说明
- 修复替换逻辑:将输入文本赋值给临时变量
result_text,每次循环基于该变量迭代替换,实现所有字典条目依次转换。 - 添加大写转换:用
upper()处理输入文本,确保和命令行版本的匹配规则一致。 - 适配只读文本框:插入结果前将Text2切换为可编辑状态,完成操作后恢复只读,同时清空原有内容避免结果叠加。
内容的提问来源于stack exchange,提问作者Isidoro Plasencia
相关产品推荐
相关产品推荐

