为了学习Tkinter,我在下面整理了程序。当我将按钮移出界面时,显示时两个框架的大小相同。但是,如果将按钮放在任一框架中,则带有按钮的框架会缩小。
import tkinter as tk
def main():
main_win = tk.Tk()
main_win.title('just playing around')
main_win.geometry('350x450')
main_win.rowconfigure(0, weight=1)
main_win.rowconfigure(1, weight=1)
main_win.columnconfigure(0, weight=1)
main_win.columnconfigure(1, weight=1)
main_win.columnconfigure(2, weight=1)
frm1 = tk.Frame(main_win, bg='red', height=100, width=350)
frm1.grid(row=0, sticky='nsew')
frm1.rowconfigure(0, weight=1)
frm1.rowconfigure(1, weight=1)
frm1.rowconfigure(2, weight=1)
frm1.columnconfigure(0, weight=1)
frm2 = tk.Frame(main_win, bg='green', height=150, width=350)
frm2.grid(row=1, sticky='nsew')
frm2.rowconfigure(0, weight=1)
frm2.rowconfigure(1, weight=1)
frm2.rowconfigure(2, weight=1)
frm2.columnconfigure(0, weight=1)
quit_btn = tk.Button(frm1, bg='lightgrey', text='Quit',
command=main_win.destroy)
quit_btn.grid(row=1)
main_win.mainloop()
return 0
if __name__ == '__main__':
main()
为什么会发生这种情况?保持框架大小相同需要什么?
(此外,调整窗口大小会导致框架在垂直方向上调整大小,而不会在水平方向上调整。为什么会发生这种情况,以及如何在两个方向(或在两个方向都将其关闭)上进行大小调整?)
答案 0 :(得分:1)
因此,因为默认情况下tkinter会强制将框架调整为窗口小部件的大小,即使您在将框架放置到窗口中后立即为其设置大小,也会将其调整为窗口小部件的大小。相反,我们需要告诉tkinter不允许传播。因此,如果我们禁止在容纳按钮的框架内传播,它将不再调整大小以适合按钮。
对于由于第1列和第2列的权重而导致在调整大小时无法向右扩展的问题。除非您计划在这些列中添加某些内容,否则您需要删除这些列的权重。
由于您向所有3列添加了权重,因此列在容器中的调整大小将保持相同。在这种情况下,因为当您开始调整窗口大小时,第1列和第2列的大小为零,所以您会注意到第0列正在调整大小,但速度不足以填充窗口。这是因为由于设置了权重,第1列和第2列的增长速度也与第0列相同。
因此,要回答您的评论,如果以后计划使用这些列,并且希望这些列也随屏幕增长,可以保留第1列和第2列的权重。
尝试此代码,如果您有任何疑问,请告诉我。
import tkinter as tk
def main():
main_win = tk.Tk()
main_win.title('just playing around')
main_win.geometry('350x450')
# main_win.rowconfigure(0, weight=1) # disable this
main_win.rowconfigure(1, weight=1)
main_win.columnconfigure(0, weight=1)
# main_win.columnconfigure(1, weight=1) # disable this
# main_win.columnconfigure(2, weight=1) # disable this
frm1 = tk.Frame(main_win, bg='red', height=100, width=350)
frm1.grid(row=0, column=0, sticky='nsew')
frm1.grid_propagate(False) # add grid_propagate(False) after your grid placement.
frm1.rowconfigure(0, weight=1)
frm1.rowconfigure(1, weight=1)
frm1.rowconfigure(2, weight=1)
frm1.columnconfigure(0, weight=1)
frm2 = tk.Frame(main_win, bg='green', height=150, width=350)
frm2.grid(row=1, column=0, sticky='nsew')
frm2.rowconfigure(0, weight=1)
frm2.rowconfigure(1, weight=1)
frm2.rowconfigure(2, weight=1)
frm2.columnconfigure(0, weight=1)
quit_btn = tk.Button(frm1, bg='lightgrey', text='Quit', command=main_win.destroy)
quit_btn.grid(row=1)
main_win.mainloop()
if __name__ == '__main__':
main()
结果:
如您所见,我可以调整底部框架的大小,而不必垂直调整顶部框架的大小,现在两个框架都水平扩展。