Python 如何避免调整tkinter窗口大小时出现列或行大小?

Python 如何避免调整tkinter窗口大小时出现列或行大小?,python,tkinter,tkinter-layout,Python,Tkinter,Tkinter Layout,我在调整tkinter中的列和行框架的大小时遇到问题。 我把列和行按1:4的比例分开。在调整窗口大小时,它会保持比例,但我希望避免调整黑色和红色边框的大小。因此,基本上,当我调整大小时,黑色和红色框架不应该增长或收缩,但所有的变化都发生在白色窗口中。我怎样才能做到这一点 代码- import tkinter as tk import tkinter.ttk as ttk root = tk.Tk() root.wm_geometry("1200x700") root.g

我在调整tkinter中的列和行框架的大小时遇到问题。

我把列和行按1:4的比例分开。在调整窗口大小时,它会保持比例,但我希望避免调整黑色和红色边框的大小。因此,基本上,当我调整大小时,黑色和红色框架不应该增长或收缩,但所有的变化都发生在白色窗口中。我怎样才能做到这一点

代码-

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
root.wm_geometry("1200x700")

root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=4)
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(1, weight=4)

f1 = tk.Frame(root, background="black", height=100, width=100)
f2 = tk.Frame(root, background="black", height=100, width=100)
f3 = tk.Frame(root, background="red", height=100, width=100)
f4 = tk.Frame(root, background="white", height=100, width=100)

f1.grid(row=0, column=0, sticky="nsew")
f2.grid(row=0, column=1, sticky="nsew")
f3.grid(row=1, column=0, sticky="nsew")
f4.grid(row=1, column=1, sticky="nsew")

root.mainloop()

您可以使用
pack
geometry manager获得所需的可调整大小的窗口几何图形:

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
root.wm_geometry("1200x700")

f1 = tk.Frame(root, bg="black", height=100)
f1.pack(anchor=tk.N, fill=tk.X)

f2 = tk.Frame(root)

f3 = tk.Frame(f2, bg="red", width=100)
f3.pack(anchor=tk.NW, side=tk.LEFT, fill=tk.Y)

f4 = tk.Frame(f2, bg="blue", width=100, height=100)
f4.pack(anchor=tk.NW, side=tk.LEFT, expand=True, fill=tk.BOTH)

f2.pack(anchor=tk.N, side=tk.TOP, expand=True, fill=tk.BOTH)

root.mainloop()

据我所知,你想要:

  • 第0列-要保持其宽度
  • 第0行-保持其高度
但您的代码集配置是这样的,即在每次调整大小时:

  • 尺寸增加的1/5将“给予”第0列
  • 尺寸增加的4/5将“给予”第1列
  • 行也一样
使用网格的正确解决方案是:

  • 保留列和行0的默认权重0
  • 为第1列和第1行指定任何正宽度
因此,将代码的相应部分更改为:

root.grid_columnconfigure(1, weight=1)
root.grid_rowconfigure(1, weight=1)

只需指定黑色边框的高度和红色边框的宽度,然后为第1列和第1行设置权重=1。这不起作用,所有边框的大小都是相同的,因为比例为1:1。如果仅为第1列和第1行设置权重=1(即仅扩展白色边框),则需要调用
f3.grid\u propagate(0)
。只需删除
grid\u column配置
grid\u row配置
列0和行0,这样它们将保持大小,并且只有行1和列1将调整大小。实际上,我想使用网格,而不是打包或放置。我在评论中得到了答案。谢谢:)哦,好的,没问题,问题中没有具体说明。