python - 在 Python Tkinter 的窗口中间的列之间放置一条网格垂直线
问题描述
这有点复杂,但我会尽力解释:
例如,当我有 2 行和 2 列时,我有一个带有 4 个标签的网格(见下图)。我正在尝试使第 1 列和第 2 列之间的垂直线(图像中的红线)成为将窗口分成相等两半的线。
您可以在下面看到我的初始代码示例。
编辑:请注意,这些元素只是例如标签,但在我的原始代码中,它们实际上都是不同的(有些是框架、一些图像、一些按钮等)
import tkinter as tk
root = tk.Tk()
label1 = tk.Label(root, text=1, width=8, height=2, bg="red")
label1.grid(row=0, column=0)
label2 = tk.Label(root, text=2, width=10, height=3, bg="green")
label2.grid(row=0, column=1)
label3 = tk.Label(root, text=3, width=5, height=4, bg="blue")
label3.grid(row=1, column=0)
label4 = tk.Label(root, text=4, width=6, height=2, bg="yellow")
label4.grid(row=1, column=1)
root.mainloop()
这段代码使每个标签的垂直和水平中心线如我所愿,但第 1 列和第 2 列之间的垂直线(图像中的红线)离窗口的中心很远。
然后,我尝试将grid_columnconfigure
函数添加到我的代码中:
import tkinter as tk
root = tk.Tk()
root.grid_columnconfigure(0, weight=1) # the line I've added
label1 = tk.Label(root, text=1, width=8, height=2, bg="red")
label1.grid(row=0, column=0)
label2 = tk.Label(root, text=2, width=10, height=3, bg="green")
label2.grid(row=0, column=1)
label3 = tk.Label(root, text=3, width=5, height=4, bg="blue")
label3.grid(row=1, column=0)
label4 = tk.Label(root, text=4, width=6, height=2, bg="yellow")
label4.grid(row=1, column=1)
root.mainloop()
但现在我有一个不同的问题,列不相互接触。
我还尝试通过sticky
在将元素放置在网格中时添加参数来解决此问题,并且还尝试将每一行和每一列放在它们自己的框架中,但所有解决方案都不适合我。
我怎样才能让它工作?希望我的解释清楚,并提前感谢(;
解决方案
您可以将四个图像/标签一起放入一个Frame
(或任何其他容器元素)中,然后将该框架水平和垂直居中在您的root
框架中,并使用place
.
c = tk.Frame(root, bg='white')
c.place(relx=0.5, rely=0.5, anchor='center')
不要忘记将标签的父级从 更改root
为c
,即Label(c, ...)
。
更新:但这不会使红色和绿色块之间的线与框架居中。您可以将其与uniform
使列的宽度相等,但是中心和较薄的列之间会有一些填充...
for n in (0, 1):
c.grid_columnconfigure(n, uniform="foo")
推荐阅读
- stack-trace - 如何在使用 retrace.jar 去混淆的 android / R8 堆栈跟踪中读取 lambda?
- sql - PostgreSQL 复合外键“列列表不得包含重复项”
- database - 如何在wordpress中运行代码来处理数据库
- python - 如何将逗号分隔的数字字符串转换为数字?
- python - 如何使用于转义字符串中字符的反斜杠不计数
- javascript - 从数组中提取值的意外行为:所有值都是 2
- graphql - 为 React Admin 3.7 实现 GraphQL 数据提供程序
- asp.net-core - JWT 在 .NET Core Web API 中过期太快
- angular - 是否在延迟加载模块时创建 2 个服务实例
- java - 在 Java 中使用序列化和反序列化时如何处理类更改