如何创建固定尺寸Frame容纳空Message控件解决Tkinter窗口hover缩放问题
问题原因
默认状态下tkinter的容器组件会根据内部子组件的尺寸自动调整自身大小,你清空instructions_field的文本时,这个Message组件的尺寸会收缩,连带外层的text_frame和根窗口一起缩小,就出现了未悬停时窗口过小的问题。
解决方法
两种方案可按需选择:
方案1:直接锁定根窗口大小
把你注释掉的固定窗口尺寸代码取消注释,再加上禁止调整窗口大小的配置即可,无论内部组件怎么变,窗口尺寸都不会变:
super().__init__() # 取消下面这行的注释 self.geometry("500x300") # 新增这行,禁止用户调整窗口大小,也禁止内部组件触发窗口大小变更 self.resizable(False, False) self.title("My Bioinformatics Toolbox")
方案2:固定text_frame的大小,不跟随子组件变化
如果你不想锁死整个窗口的大小,只希望提示文本区域的尺寸固定,那就关闭text_frame的布局传播,让你设定的width参数生效,不会被子组件的大小覆盖:
# Create the text field frame text_frame = ttk.Frame(self, width=500, height=120) # 设定足够放下最长提示的宽高 text_frame.pack(side=RIGHT) # 新增这行,关闭grid布局的大小传播,子组件尺寸不会影响text_frame的大小 text_frame.grid_propagate(False)
任选一种方案修改后即可实现预期效果,窗口不会因为悬停显示/隐藏提示文本发生大小变化。
内容的提问来源于stack exchange,提问作者Henrik Karlsson
相关产品推荐
相关产品推荐

