有点复杂,但我会尽力说明:
假设例如,当我有2行2列时,我有一个带有4个标签的网格(请参见下图)。我正在尝试使第1列和第2列之间的垂直线(图像中的红线)成为将窗口分成相等的两半的线。
您可以在下面看到我的初始代码示例。
编辑:请注意,元素仅是标签,但是在我的原始代码中,它们实际上都是不同的(有些是框架,某些图像,某些按钮等)
val nested_fields = df.schema("b2").fieldNames.toList
此代码可以使每个标签的垂直和水平中心线达到我想要的完美,但是第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()
函数添加到我的代码中:
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()
参数来解决此问题,并且还尝试将每一行和每一列都放在自己的框架中,但是所有解决方案对我不起作用。
我该如何工作?希望我的解释清楚,并在此先感谢(;
答案 0 :(得分:1)
您可以将四个图像/标签放到Frame
(或任何其他容器元素)中,然后使用place
使该框架在root
框架中水平和垂直居中
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")
答案 1 :(得分:0)
您可以使用ttk.Separator小部件。 您应该使用以下代码部分:
import tkinter.ttk
import tkinter as tk
root = tk.Tk()
---etc---
---etc---
---etc---
tkinter.ttk.Separator(master, orient=VERTICAL).grid(column=1, row=0, rowspan=2, sticky='ns')
root.mainloop()
您可以使用“ grid_info”方法获取小部件的网格信息。
row = widget.grid_info()['row'] # Row of the widget
column = widget.grid_info()['column'] # Column of the widget
答案 2 :(得分:0)
由于有2列,所以root.grid_columnconfigure(0, weight=1)
仅影响第一列。
试试
for n in range(2):
root.grid_columnconfigure(n, weight=1)
或
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)