Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter框架和网格_Python_Tkinter - Fatal编程技术网

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
    填充框架。有没有一种方法可以用网格创建框架(如果你推荐的话?)。然而,在这种情况下,我将只使用网格进行所有操作。我觉得更容易想象。这太棒了。谢谢你帮我理解