对于我的生活,我无法理解grid
中的Frame
。我试图创建以下配置,但我得到了不同的东西(突出显示的区域是麻烦的部分)。
以下是code
:
from tkinter import *
root = Tk()
weather_root = Frame(root,width=1000, height=5, bg = 'white')
weather_root.pack(side=TOP)
quote_root = Frame(root,width=1000, height =5, bg = 'white')
quote_root.pack(side=TOP)
news_root = Frame(root,width=1000, height =100, bg = 'white')
news_root.pack(side=TOP, fill= BOTH)
financial_root= Frame(root,width=1000, height =100, bg = 'white')
financial_root.pack(side=TOP, fill= BOTH)
# PROBLEM BOX
time_root = Frame(root, bg = 'yellow')
time_root.pack(side = RIGHT, fill= BOTH)
我仍然很陌生,所以我确定它显而易见,但它是什么? (在图片中我把它拆分为两帧 - 这是最终目标,但在短期内,我只是试图让帧显示在当前放置的帧的右侧) 。非常感谢!
预期产出:
实际输出:
答案 0 :(得分:1)
完成所需输出的最简单方法是创建两个单独的子帧。您可以将天气,报价,新闻和财务根帧打包到左侧子帧中,然后将时间帧打包到右侧子帧中。最后,你将它们打包到root中,一个使用SIDE = LEFT,另一个使用SIDE = RIGHT。此外,可以在一个应用程序中有效地使用Grid和Pack,但是一次只能使用一个布局管理器(grid vs pack)管理一个单独的窗口小部件(例如框架)。因此,您可以将框架等网格小部件网格化为一个框架,然后将该框架打包到另一个框架中。或者,您可以将东西打包到子框架中,然后将其网格化到窗口的主框架中。
答案 1 :(得分:1)
pack
几何管理器不适合在网格中布局。不出所料,grid
是更好的选择。除非您专门添加其他框架以帮助布局,否则使用pack
执行所需操作将非常困难。
使用grid
执行此操作非常简单。它看起来像这样:
weather_root.grid( row=0, column=0, sticky="nsew")
quote_root.grid( row=1, column=0, sticky="nsew")
news_root.grid( row=2, column=0, sticky="nsew")
financial_root.grid(row=3, column=0, sticky="nsew")
time_root.grid( row=0, column=1, sticky="nsew", rowspan=4)
您还需要使用root.grid_rowconfigure
和root.grid_columnconfigure
将权重应用于调整窗口大小时应增长或缩小的行和列。
如果您想使用pack
,我建议您添加两个额外的框架:一个用于左侧(灰色),另一个用于右侧(黄色)。你可以使用pack
来表示这两个。然后,在左侧,您可以使用pack
从上到下堆叠区域。在您的具体情况下,这是否是正确的解决方案,我不知道。
注意:
我强烈建议您以这种方式对来电grid
或pack
进行分组。当它们全部在一个位置而不是与其他代码交错时,它的很多更容易管理。
我不建议在示例中使用额外的空格作为showin。我这样做只是为了让您更容易看到行和列的关系。
有关pack
工作原理的规范说明,请参阅http://tcl.tk/man/tcl8.5/TkCmd/pack.htm#M26