如何让Tkinter提示框文本更新而非叠加显示?
解决方案
你可以通过维护单个ToolTip实例解决文本叠加的问题,不用每次选择都新建实例,具体实现如下:
- 先在类的初始化方法里添加一个属性,用来保存ToolTip实例:
def __init__(self, ...): # 其他初始化代码 self.tooltip = None # 用于存储ToolTip实例的属性
- 修改
show_info_for_test方法,优先复用已有实例:
def show_info_for_test(self, chosen_test): # 先映射选择项对应的提示文本 msg_map = { "00.NA": "No test has been chosen", "01.Min": "Fail if real minimum smaller", "02.Max": "Fail if real max larger", "03.Min-Max": "Fail if not in range" } target_msg = msg_map.get(chosen_test, "") # 处理ToolTip实例 if self.tooltip is not None: # 若ToolTip类允许直接修改文本属性,直接更新 self.tooltip.msg = target_msg # 如果需要刷新提示框才能显示新文本,可调用对应刷新方法,比如: # self.tooltip.refresh() else: # 首次创建实例并保存 self.tooltip = ToolTip(self.expected_val, msg=target_msg)
特殊情况处理
如果你的ToolTip类不支持直接修改文本属性,可以先销毁旧实例再创建新的,同样不会出现叠加:
def show_info_for_test(self, chosen_test): msg_map = { "00.NA": "No test has been chosen", "01.Min": "Fail if real minimum smaller", "02.Max": "Fail if real max larger", "03.Min-Max": "Fail if not in range" } target_msg = msg_map.get(chosen_test, "") # 销毁旧实例(如果存在) if self.tooltip is not None: self.tooltip.destroy() # 假设ToolTip类提供destroy方法用于销毁 # 创建新实例并复用属性存储 self.tooltip = ToolTip(self.expected_val, msg=target_msg)
内容的提问来源于stack exchange,提问作者user17543723
相关产品推荐
相关产品推荐

