【问题标题】:TK, understanding pack and expanding spaceTK,了解包,拓展空间
【发布时间】:2015-09-27 00:47:24
【问题描述】:

我有一个可调整大小的窗口,我希望在其中有两个带有滚动条的列表框,可以展开以填充所有可用空间。

当我只有一个列表框打包为fill=both, expand=1, side=left 和一个滚动条打包为fill=Y, expand=0, side=right 时,它只会水平扩展,即使它设置为填充两个方向。当我调整窗口大小时,列表框只填充侧面。窗口底部保持空白。

然后我继续添加另一个列表框。现在我没有把滚动条放在右边,而是把所有东西都放在左边,所以它们是堆叠的。列表框继续具有fill=both, expand=1。现在,当我调整窗口大小时,两个列表框都只能垂直填充!水平空间保持空白。

发生了什么事?为什么它会忽略一个元素左边和另一个右边的垂直空间?以及为什么当所有东西都向左堆叠时它拒绝水平填充?

一旦它填满了垂直或水平空间,我就会相信父框架正在正常扩展……还是我也应该对此进行更多调查?

【问题讨论】:

    标签: python tkinter tk


    【解决方案1】:

    如果不查看您的实际代码,就不可能知道您做错了什么。下面是一个例子来证明pack 的工作原理与文档一致:

    import Tkinter as tk
    
    root = tk.Tk()
    lb1 = tk.Listbox(root)
    lb2 = tk.Listbox(root)
    vsb1 = tk.Scrollbar(root, orient="vertical", command=lb1.yview)
    vsb2 = tk.Scrollbar(root, orient="vertical", command=lb2.yview)
    lb1.configure(yscrollcommand=vsb1.set)
    lb2.configure(yscrollcommand=vsb2.set)
    
    lb1.pack(side="left", fill="both", expand=True)
    vsb1.pack(side="left", fill="y", expand=False)
    lb2.pack(side="left", fill="both", expand=True)
    vsb2.pack(side="left", fill="y", expand=False)
    
    root.mainloop()
    

    【讨论】:

    • 哈!在调整您的代码以添加父 Frame 时,为了确定,我犯了一个错误,没有将列表框的父级从根更改为新框架,显然扩展框架的空白空间就是我所看到的...果然,这是我认为我之前在代码上犯的错误。
    【解决方案2】:

    我正在使用的解决方法(如果不是正确的传统方式,请投反对票)

    我创建了两个框架,都是side=LEFT, expand=1, fill=BOTH,然后将每对列表框+滚动条放在那里。现在一切都展开/填充就好了。

    以前列表框位于黄色框架中。我刚刚创建的是蓝色和绿色。

    仍然不确定包管理器是否会在列表框有滚动条时不会展开它们之间没有展开...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 2012-01-05
      • 2018-01-26
      • 1970-01-01
      • 2011-10-21
      相关资源
      最近更新 更多