Skip to main content
 首页 » 编程设计

python之减少屏幕大小时,避免状态栏(页脚)在 GUI 中消失

2024年08月21日34jiqing9006

我使用 tkinter 开发了一个相当大的 GUI。

除了大幅降低窗口高度外,调整大小时一切正常。所有框架都使用“pack()”放置。

GUI 的基本垂直结构是(从上到下排序)

  • 工具栏框架

    self.frame_Toolbar=Frame(self.root, bg=colorBackground) 
    self.frame_Toolbar.pack(side=TOP, fill=X) 
    
  • 包含所有基本信息的中间框架

    self.frame_Middle=Frame(self.root) 
    self.frame_Middle.pack(side=TOP, fill=BOTH, expand=YES) 
    
  • 状态栏

    self.frame_Status=Frame(self.root, bg=colorStatus, bd=1, relief=SUNKEN) 
    self.frame_Status.pack(side=BOTTOM, fill=X) 
    

如果调整窗口大小,中间框架会放大,这很好,因为它是我想要的。

问题是,当窗口的高度降低很多时,状态栏消失,因为中间框架适应了内部小部件。但是,我希望状态栏和工具栏都保持不变,即使隐藏了一些小部件,中间框架也会根据需要减少。

总而言之,我希望工具栏和状态栏都有一个最小高度。

这可能吗?

编辑:我添加了一个具有相同错误的功能性 MCVE 代码

# Import graphical interface 
from tkinter import * 
 
 # Fixed window 
root_fw=Tk() 
 
# Toolbar 
frame_Toolbar=Frame(root_fw, bg='red', height=50) 
frame_Toolbar.pack(side=TOP, fill=X) 
 
# Middle  
frame_Middle=Frame(root_fw, bg='blue', height=300) 
frame_Middle.pack(side=TOP, fill=BOTH, expand=YES) 
 
# Status bar 
frame_Status=Frame(root_fw, bg='green', bd=1, relief=SUNKEN, height=20) 
frame_Status.pack(side=BOTTOM, fill=X) 
 
root_fw.mainloop() 

请您参考如下方法:

一旦所有小部件都处于最小尺寸,当您缩小窗口时,tkinter 必须开始减小一个或多个小部件的尺寸。它按照小部件在堆叠顺序中出现的顺序执行此操作。简而言之,它开始从最后一个打包的小部件中删除空间。

所以,简短的回答是在打包中间部件之前打包状态栏。一般而言,GUI 将有一个占据大部分空间的“英雄”小部件;这个窗口应该最后打包,以便在调整窗口大小时其他小部件不会被剪裁。

我的建议是始终将小部件创建与小部件布局分开,并将布局组合在一起。我发现这种做法使布局问题更容易解决。因此,我会将您的代码修改为如下所示:

from tkinter import * 
 
root_fw=Tk() 
 
frame_Toolbar=Frame(root_fw, bg='red', height=50) 
frame_Middle=Frame(root_fw, bg='blue', height=300) 
frame_Status=Frame(root_fw, bg='green', bd=1, relief=SUNKEN, height=20) 
 
frame_Toolbar.pack(side=TOP, fill=X) 
frame_Status.pack(side=BOTTOM, fill=X) 
frame_Middle.pack(side=TOP, fill=BOTH, expand=YES) 
 
root_fw.mainloop()