Python Tkinter框架和网格
就我而言,我无法理解Python Tkinter框架和网格,python,tkinter,Python,Tkinter,就我而言,我无法理解Frame中的grid。我试图创建下面的配置,但我得到了一些不同的东西(突出显示的区域是麻烦的部分) 这是代码: 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 = 'whit
Frame
中的grid
。我试图创建下面的配置,但我得到了一些不同的东西(突出显示的区域是麻烦的部分)
这是代码
:
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)
我还是个新手,所以我肯定这是显而易见的,但这是什么?(在图片中,我将其拆分为两帧-这是最终目标,但在短期内,我只是试图让帧显示在当前放置帧的右侧)。非常感谢
预期产出:
实际产出:
实现所需输出的最简单方法是创建两个单独的子帧。您可以将天气、报价、新闻和金融根帧打包到左侧子帧中,然后将时间帧打包到右侧子帧中。最后,将它们都打包到root中,一个使用SIDE=LEFT,另一个使用SIDE=RIGHT。此外,可以在一个应用程序中有效地使用网格和包,但一次只能使用一个布局管理器(网格vs包)管理一个单独的小部件(例如框架)。因此,您可以将框架等小部件网格化到一个框架中,然后将该框架打包到另一个框架中。或者,您可以将内容打包到子框架中,然后将其网格化到窗口的主框架中 实现所需输出的最简单方法是创建两个单独的子帧。您可以将天气、报价、新闻和金融根帧打包到左侧子帧中,然后将时间帧打包到右侧子帧中。最后,将它们都打包到root中,一个使用SIDE=LEFT,另一个使用SIDE=RIGHT。此外,可以在一个应用程序中有效地使用网格和包,但一次只能使用一个布局管理器(网格vs包)管理一个单独的小部件(例如框架)。因此,您可以将框架等小部件网格化到一个框架中,然后将该框架打包到另一个框架中。或者,您可以将内容打包到子框架中,然后将其网格化到窗口的主框架中 packgeometry manager不适合在网格中布局。毫不奇怪,
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\u row configure
和root.grid\u column configure
对调整窗口大小时应增大或缩小的行和列应用权重
如果要使用pack
,我建议添加两个额外的帧:一个用于左侧(灰色),另一个用于右侧(黄色)。您可以对这两个组件使用pack
。然后,在左侧,您可以使用pack
从上到下堆叠区域。我不知道在你的具体情况下,这是否是正确的解决方案
注:
grid
或pack
。当它们都在一个位置而不是与其他代码交错时,管理起来就容易多了pack
工作原理的规范描述,请参阅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\u row configure
和root.grid\u column configure
对调整窗口大小时应增大或缩小的行和列应用权重
如果要使用pack
,我建议添加两个额外的帧:一个用于左侧(灰色),另一个用于右侧(黄色)。您可以对这两个组件使用pack
。然后,在左侧,您可以使用pack
从上到下堆叠区域。我不知道在你的具体情况下,这是否是正确的解决方案
注:
grid
或pack
。当它们都在一个位置而不是与其他代码交错时,管理起来就容易多了pack
工作原理的规范描述,请参阅您的问题提到了
grid
,但您的代码显示了pack
。你在问什么?啊,我当时正在使用这两种方法,我想-我知道这是一个很大的禁忌-我想我可以用pack
创建框架,然后用grid
填充框架。有没有一种方法可以用网格创建框架(如果你推荐的话?)。然而,在这种情况下,我将只使用网格进行所有操作。我认为更容易可视化。你的问题提到了网格
,但你的代码显示了包
。你在问什么?啊,我当时正在使用这两种方法,我想-我知道这是一个很大的禁忌-我想我可以用pack
创建框架,然后用grid
填充框架。有没有一种方法可以用网格创建框架(如果你推荐的话?)。然而,在这种情况下,我将只使用网格进行所有操作。我觉得更容易想象。这太棒了。谢谢你帮我理解