<p>我知道以前的帖子,但我也很难让列和行保持相同的宽度/高度,所以我想我会分享我的解决方案</p>
<p>对python和tkinter来说是新的,所以如果有任何错误,请告诉我</p>
<p>我创建了一个网格管理器,这使得主窗口和任何框架都可以设置成等距的列和行,这并不是100%,但是对于我所使用的它来说,它工作得很好,在构建阶段特别有用</p>
<p>创建框架时的一个缺点是框架的最大行/列数必须等于或小于它所跨越的行/列数,否则会有点奇怪(不知道为什么)</p>
<p>希望这有帮助</p>
<pre><code>import tkinter
class grid_manager:
def __init__(self, Frame, colour = "gray94"):
self.Frame = Frame
self.Colour = colour
def set_grid(self, numofRows, numofColumns, borderwidth = 1):
self.numofRows = numofRows
self.numofColumns = numofColumns
self.borderwidth = borderwidth
for i in range(numofRows):
for j in range(numofColumns):
canvas = tkinter.Canvas(self.Frame)
canvas.config(relief="raised", borderwidth=self.borderwidth) #comment out to hide grid layout
canvas.grid(row=i, column=j)
canvas.config(background=self.Colour)
self.Frame.columnconfigure(j, weight=1)
self.Frame.rowconfigure(i, weight=1)
mainwindow = tkinter.Tk()
mainwindow.title("Test")
mainwindow.geometry("640x480-8-200")
mainGrid = grid_manager(mainwindow)
mainGrid.set_grid(10, 10)
header_Frame = tkinter.Frame(mainwindow)
header_Frame.grid(row=0, column=0, columnspan=10, sticky="nsew")
headerGrid = grid_manager(header_Frame)
headerGrid.set_grid(numofRows=1, numofColumns=10, borderwidth=5)
footerFrame = tkinter.Frame(mainwindow)
footerFrame.grid(row=9, column=0, columnspan=10, sticky="nsew")
footerGrid = grid_manager(footerFrame, "red")
footerGrid.set_grid(numofRows=1, numofColumns=10, borderwidth=5)
rightFrame = tkinter.Frame(mainwindow)
rightFrame.grid(row=1, column=5, rowspan=5, columnspan=5, sticky="nsew")
rightGrid = grid_manager(rightFrame, "blue")
rightGrid.set_grid(numofRows=5, numofColumns=5, borderwidth=2)
leftFrame = tkinter.Frame(mainwindow)
leftFrame.grid(row=3, column=0, rowspan=5, columnspan=4, sticky="nsew")
leftGrid = grid_manager(leftFrame, "yellow")
leftGrid.set_grid(numofRows=5, numofColumns=4, borderwidth=2)
mainwindow.mainloop()
</code></pre>
<p><a href="https://i.stack.imgur.com/kitfb.png" rel="nofollow noreferrer">enter image description here</a></p>