Python 在Tkinter中使用多个帧不会产生预期的结果

Python 在Tkinter中使用多个帧不会产生预期的结果,python,tkinter,frames,Python,Tkinter,Frames,我一直在学习Tkinter,我已经编写了一个小代码,其中我希望三个帧成为一个帧的一部分。现在,当我逐行执行这段代码时,它就会按预期工作。但是,在将其作为一个整体程序运行时,第1帧和第2帧之间存在大量空白 from Tkinter import * tk = Tk() tk.geometry("") main_frame = Frame(tk) main_frame.grid(row=0) frame1 = Frame(main_frame, bg="blue", width=200, heigh

我一直在学习Tkinter,我已经编写了一个小代码,其中我希望三个帧成为一个帧的一部分。现在,当我逐行执行这段代码时,它就会按预期工作。但是,在将其作为一个整体程序运行时,第1帧和第2帧之间存在大量空白

from Tkinter import *
tk = Tk()
tk.geometry("")
main_frame = Frame(tk)
main_frame.grid(row=0)
frame1 = Frame(main_frame, bg="blue", width=200, height=400, borderwidth =1)
frame1.grid(row=0, column=0)
frame2 = Frame(main_frame, bg="green", width=800, height=400)
frame2.grid(row=0, column=1)
frame3 = Frame(main_frame, bg="orange", width=1000, height=100)
frame3.grid(row =1)
tk.mainloop()
另一个问题是,如果我最大化窗口并将其更改回原始大小,或者我拉伸此主窗口。我看到画面重叠,还有一些鬼影。有人能解释这种奇怪的行为吗


关于

问题在于网格化的方式。默认情况下,每个对象都将网格化为单个块。所以,你的网格看起来像这样:

 -------------------------------
 |    frame 1     |  frame 2   |
 -------------------------------
 |    frame 3     |  nothing   |
 -------------------------------
在这种情况下,
frame1
所在的区域会被扩展以容纳
frame3
,因为
frame3
要大得多。这里的解决方法是指定
columnspan
关键字,以允许
frame3
跨越网格上的多个列

frame3.grid(row=1,column=0,columnspan=2)

问题在于网格化的方式。默认情况下,每个对象都将网格化为单个块。所以,你的网格看起来像这样:

 -------------------------------
 |    frame 1     |  frame 2   |
 -------------------------------
 |    frame 3     |  nothing   |
 -------------------------------
在这种情况下,
frame1
所在的区域会被扩展以容纳
frame3
,因为
frame3
要大得多。这里的解决方法是指定
columnspan
关键字,以允许
frame3
跨越网格上的多个列

frame3.grid(row=1,column=0,columnspan=2)

多谢各位。解决了我的问题,非常感谢。解决了我的问题。