【问题标题】:In Python3/tkinter how to set the size of a frame relative to its parent window size?在 Python3/tkinter 中,如何设置框架相对于其父窗口大小的大小?
【发布时间】:2016-04-28 14:14:31
【问题描述】:

在 Python3/tkinter 中是否有一种简单的方法可以将 ttk.frame 的大小设置为相对于其父窗口大小,并确保在调整窗口大小时它会正确调整(及其所有小部件)?

作为一点上下文,我正在尝试将pack() ttk.frameroot 窗口宽度小几个像素。

【问题讨论】:

  • 这个问题没有单一的答案。可以通过多种方式使框架具有相对于父级的大小。这取决于框架中的内容,父框架中的内容,这些框架如何使用包、网格或位置,您希望如何处理额外的空间等。这个问题写得太宽泛了。
  • 他确实指定了 pack 的使用

标签: python-3.x tkinter window


【解决方案1】:

如果您知道自己想要的尺寸并拥有它:

root = # Your root window
myFrame = ttk.Frame(root, height=desiredHeight, width=desiredWidth)
myFrame.pack()

所以如果你想要它相对于根:

root = # Your root window
rootHeight = root.winfo_height()
rootWidth = root.winfo_width()
# Say you want it to be 20 pixels smaller
myFrame = ttk.Frame(root, height=rootHeight-20, width=rootWidth-20)
myFrame.pack()
# OR
myFrame = ttk.Frame(root) # No set dimensions
myFrame.pack(padx=20, pady=20)
# This will make it have a padding of 20 pixels on height and width,
# with respect to parent rather than itself

【讨论】:

  • 毕竟看起来很简单。如果我们使用place() 而不是pack(),是否也可以使其相对于父级(例如在您的最后两行代码中)?
  • 我尝试了一点,place() 我们可以使用类似的方法获得类似的效果(在这种情况下,我正在播放具有相对于另一个对象的位置的新帧):FRAME.place(in_=OTHER_OBJECT, relx=.95, y=0, anchor="se", relwidth=.9) .这样,我们得到一个框架撕裂,它具有 90% 的窗口宽度,并在左右两侧以 5% 的水平空间定位。
  • 这也是一个好主意,但要小心,place 几何管理器更加简单,因此特别是它是一个好主意,通常最好避免它
  • 我仍在学习它,但现在我更坚持使用 pack 和 grid 的组合,以供一般使用,遵循一些 stackoverflow 用户的善意建议。但事实上,对于一种特定情况(出现在其他框架之上的弹出框),我一直在使用 @Bryan Oakley 建议的 place,效果很好。
猜你喜欢
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多