【问题标题】:How can I stack buttons rather than queue them in Tkinter?如何堆叠按钮而不是在 Tkinter 中排队?
【发布时间】:2015-03-26 05:19:47
【问题描述】:

目前我显示了 3 个基本按钮:

from tkinter import *

root = Tk()

topFrame = Frame(root)
topFrame.pack(side=TOP)
leftFrame = Frame(root)
leftFrame.pack(side=LEFT)
botFrame = Frame(root)
botFrame.pack(side=BOTTOM)

button1 = Button(leftFrame, text="Button 1", fg="Black")
button2 = Button(leftFrame, text="Button 2", fg="Black")
button3 = Button(leftFrame, text="Button 3", fg="Black")

button1.pack(side=LEFT)
button2.pack(side=LEFT)
button3.pack(side=LEFT)

root.mainloop()

此时 3 个按钮会粘在窗口的左侧框架上,但随后会彼此相邻排列,而不是一个在另一个之上,我该如何解决这个问题?

【问题讨论】:

  • 你告诉他们在左边。您是否尝试过告诉他们要领先 (side=TOP)?

标签: python tkinter alignment frames


【解决方案1】:

您明确告诉他们与side=LEFT 并肩作战。您希望 side=TOP 将它们放置在框架中空白空间的顶部。

button1.pack(side=TOP)
button2.pack(side=TOP)
button3.pack(side=TOP)

当您使用 pack 时,值 TOP、LEFT、RIGHT 和 BOTTOM 告诉小部件它们应该占据 剩余空间的哪一侧。第一次使用 LEFT 时,它将为小部件保留整个框架的左侧。下次您使用 LEFT 时,它指的是小部件中剩余的空间不包括左边缘,因为其中已经有一个小部件。最终结果是 LEFT 使小部件从左到右排列,RIGHT 使它们从右到左排列,依此类推。

【讨论】:

    【解决方案2】:

    探索grid 函数。将您的 pack 语句更改为

    button1.grid(row=0,column=0)
    button2.grid(row=1,column=0)
    button3.grid(row=2,column=0)
    

    【讨论】:

    • 为什么是第 1 列而不是第 0 列?
    • @BryanOakley 从小就开始做第 0 列,可能是由于编程习惯不好,如果你认为我应该编辑,我会编辑。拥有column = 1 是不是很糟糕?
    • 这本身还不错,只是很奇怪,因为第一列是第 0 列。没有充分理由使用 1 会使代码混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多