如何跨类调用Tkinter控件且避免界面其他框架被重新渲染
问题根因
你在更新文本时错误地重新实例化了TroisiemeUI类,没有复用主窗口初始化阶段已经创建好的绑定了原有第三个框架的实例:
- 主窗口
MyWindow的__init__方法中已经完成了所有框架初始化,其中self.third = TroisiemeUI(self.troisieme_frame)是绑定了第三个框架的正常可用实例 - 你在
default_operation_EM方法中执行instance = TroisiemeUI(self)时,相当于将整个主窗口作为父容器创建了一套新的TroisiemeUI控件,新控件的grid布局会覆盖主窗口原有布局配置,直接导致另外两个框架被遮盖/消失
修复方法
直接复用已有的self.third实例更新文本即可,不需要重新实例化TroisiemeUI。
将default_operation_EM中的原有更新代码:
data ='test of writing' instance = TroisiemeUI(self) instance.changeText(data)
替换为以下代码即可:
data ='test of writing' self.third.changeText(data)
可选优化
如果需要每次更新文本时清空原有内容,避免历史内容堆积,可以修改changeText方法:
def changeText(self,nvtexte): # 先清空原有文本 self.texto.delete('1.0', 'end') # 插入新文本 self.texto.insert('1.0',nvtexte)
内容的提问来源于stack exchange,提问作者Moogly
相关产品推荐
相关产品推荐

