我使用 tkinter 开发了一个相当大的 GUI。
调整大小时,除了大幅降低窗口高度的情况外,一切都工作得很好。所有框架均使用“pack()”放置。
GUI的基本垂直结构是(从上到下排序):
工具栏框架
self.frame_Toolbar=Frame(self.root, bg=colorBackground)
self.frame_Toolbar.pack(side=TOP, fill=X)
Run Code Online (Sandbox Code Playgroud)中框包含所有基本信息
self.frame_Middle=Frame(self.root)
self.frame_Middle.pack(side=TOP, fill=BOTH, expand=YES)
Run Code Online (Sandbox Code Playgroud)状态栏
self.frame_Status=Frame(self.root, bg=colorStatus, bd=1, relief=SUNKEN)
self.frame_Status.pack(side=BOTTOM, fill=X)
Run Code Online (Sandbox Code Playgroud)如果调整窗口大小,中间框架会放大,这很好,因为这是我想要的。
问题是,当窗口高度减少很多时,状态栏会消失,因为中间框架会适应内部小部件。但是,我希望状态栏和工具栏都得到保留,并且即使隐藏一些小部件,中间框架也会根据需要减少。
总而言之,我希望工具栏和状态栏都有一个最小高度。
那可能吗?
编辑:我添加了一个具有相同错误的功能性 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()
Run Code Online (Sandbox Code Playgroud)
一旦所有小部件都达到最小尺寸,当您缩小窗口时,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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |