python - 网格几何管理器不会将框架置于窗口中间
问题描述
不久前我开始在 python 中开发一些 GUI,最后我决定我知道的足够多,可以用网格几何管理器编写一个完整的 GUI。
我惊讶地发现,当我尝试使用sticky="nsew"
参数将网格的框架扩展到窗口边缘时,它不起作用,并且网格中的所有元素都保留在屏幕的左上角。
你可以在下面查看我的代码和一些截图。
为了解决这个问题,我尝试了各种解决方案,包括删除sticky
参数(第 7 行),但是,这会弄乱背景颜色并且框架不会延伸到窗口边缘。如何解决此问题并使框架延伸到窗口边框?提前致谢!(;
使用GridPage
类 -不居中!
使用PackPage
类和.pack()
函数 -像我需要的那样居中
这是第二个示例的代码:
import tkinter as tk
class DefaultPage(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.grid(row=0, column=0, sticky="nsew")
class GridPage(DefaultPage):
def __init__(self, *args, **kwargs):
DefaultPage.__init__(self, *args, **kwargs)
tk.Button(self, text='hello!').grid()
tk.Label(self, text="I'm placed USING GRID").grid()
class PackPage(DefaultPage):
def __init__(self, *args, **kwargs):
DefaultPage.__init__(self, *args, **kwargs)
tk.Button(self, text='hi there!').pack()
tk.Label(self, text="I'm placed USING PACK").pack()
root = tk.Tk()
baseframe = tk.Frame(root)
baseframe.pack(side="top", fill="both", expand=True)
baseframe.grid_rowconfigure(0, weight=1)
baseframe.grid_columnconfigure(0, weight=1)
# frame = PackPage(baseframe, bg='yellow') # second screenshot. works as intended
frame = GridPage(baseframe, bg='yellow') # not centerd in the middle of the window.
root.mainloop()
解决方案
您需要配置行和列的权重。默认情况下,权重 = 0,这意味着框架内的小部件将始终缩小到可能的最小尺寸。所以你需要配置它。
这是使用这些功能
grid_rowconfigure()
和 grid_columnconfigure()
您在这里需要做的似乎是使列权重 = 1 以随容器扩展,同时保持第一行的权重 = 0 以使您的标签和按钮始终竖起。
您的代码将是这样的
class DefaultPage(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.grid(row=0, column=0, sticky="nsew")
self.grid_rowconfigure(0, weight=0)
self.grid_columnconfigure(0, weight=1)
class GridPage(DefaultPage):
def __init__(self, *args, **kwargs):
DefaultPage.__init__(self, *args, **kwargs)
tk.Button(self, text='hello!').grid(sticky="n")
tk.Label(self, text="I'm placed USING GRID").grid(sticky="n")
推荐阅读
- c++ - 如何让 OpenMP 与 #pragma omp 任务一起工作?
- kubernetes - Kubernetes:定义 securityContext 默认值的类型在哪里?
- c++ - collect2.exe: 错误: ld 返回 1 退出状态 \\ CPP & HPP 文件
- google-apps-script - 请帮助我使用增量功能
- python-3.x - 从字典列表中删除 listname
- c - 位移后返回不同结果的等效语句的解释
- c# - .netcore 应用程序在引用 c++ dll 时抛出 SEHException 异常
- laravel - 验证在实时服务器 laravel 8 中不起作用
- puppeteer - 如何检查 puppeteer 中元素句柄上的 disabled 属性?
- flutter - Flutter 应用开发需要学习的东西