在Tkinter中使用多个帧并未给出预期的结果

时间:2012-07-11 14:44:53

标签: 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, 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()

其他问题是如果我最大化窗口并将其更改回原始大小或我拉伸此主窗口。我看到帧重叠,有些鬼图像。有人可以解释这种奇怪的行为。

此致

1 个答案:

答案 0 :(得分:4)

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

 -------------------------------
 |    frame 1     |  frame 2   |
 -------------------------------
 |    frame 3     |  nothing   |
 -------------------------------

在这种情况下,frame1所在的区域会扩展到容纳frame3,因为frame3要大得多。此处的解决方法是指定columnspan关键字,以允许frame3跨越网格上的多个列。

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