【问题标题】:How can I set 3 or more Frames using tkinter?如何使用 tkinter 设置 3 个或更多帧?
【发布时间】:2020-06-23 18:16:43
【问题描述】:

我正在尝试这样做,以便可以在 medFrame 中放置按钮,但它们出现在 topFrame 中。使用 topFrame 时,按钮靠在屏幕顶部,看起来很糟糕,所以我想这可以通过使用第三个框架来解决。

from tkinter import *


root = Tk()
root.title('BulletHead')
root.attributes('-fullscreen', True)
root.resizable(width = NO, height=NO)  

topFrame=Frame(root)
topFrame.pack(side=TOP)

medFrame=Frame(root)
medFrame.pack()

botFrame = Frame(root)
botFrame.pack(side=BOTTOM)

botonJugar = Button(medFrame, text = 'Jugar')
botonJugar.bind("<Button-1>",jugar)
botonJugar.pack()

botonTabla = Button(medFrame, text = 'Tabla de puntajes')
botonTabla.bind("<Button-1>",tabla)
botonTabla.pack()

root.mainloop()

【问题讨论】:

  • 建议您完全不要使用pack,而是使用grid 方法进行几何管理。发现它更直观。 effbot.org/tkinterbook/grid.htm
  • @AndrewAllaire:直觉是非常主观的。我个人觉得pack 更直观,尽管我已经使用了很长时间。可以说,如果您要创建垂直或水平排列,pack 优于 grid
  • 如何使用网格和使用包在按钮之间创建空间?

标签: python tkinter tkinter-layout


【解决方案1】:

小部件出现在顶部的原因是因为topFrame 是空的。由于它没有高度或宽度,也没有子节点,因此它只有一个像素大小。如果你给它一个宽度和高度,或者在里面放一些小部件,你会看到这个按钮实际上是在中间框架中。

这是我给框架一个人为的宽度和高度并强制框架填充“x”方向时得到的图像(并且为了说明目的还缩小了窗口):

这是我所做的更改(请注意,我还添加了颜色以使框架更容易看到):

topFrame = Frame(root, bg="pink", height=100)
medFrame = Frame(root, bg="bisque")
botFrame = Frame(root, bg="yellow", height=100)

topFrame.pack(side=TOP, fill="x")
medFrame.pack(fill="x")
botFrame.pack(side=BOTTOM, fill="x")

如果您希望中框占据所有额外空间,请添加expand 选项并让它填充两个方向:

medFrame.pack(fill="both", expand=True)

将小部件添加到顶部和底部框架后,它们的高度会缩小以适应其内容,从而非常容易顶部创建工具栏和状态栏。

【讨论】:

    【解决方案2】:

    元素已成功添加到中间帧,但它们看起来好像在顶部帧中,因为 topFramebotFrame 没有尺寸,因此它们不会出现(除非你能感知到一个像素) .要为中间框架获得一些间距,您需要为其他框架提供一些尺寸。试试这个给中间框架一些间距:

    topFrame=Frame(root, height=200, width=200)
    botFrame = Frame(root, height=200, width=200)
    

    对此的替代方法是查看其他一些选项,以仅使用一帧来使用 pack geometry manager 以获得所需的结果。特别是expand= 选项有助于在窗口中居中对象。

    from tkinter import *
    
    root = Tk()
    root.title('BulletHead')
    root.attributes('-fullscreen', True)
    root.resizable(width = NO, height=NO)  
    
    medFrame=Frame(root)
    medFrame.pack(expand=True)
    
    botonJugar = Button(medFrame, text = 'Jugar')
    botonJugar.bind("<Button-1>",jugar)
    botonJugar.pack()
    
    botonTabla = Button(medFrame, text = 'Tabla de puntajes')
    botonTabla.bind("<Button-1>",tabla)
    botonTabla.pack()
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2022-01-09
      • 2021-10-02
      • 2011-05-09
      • 2016-07-17
      相关资源
      最近更新 更多