【问题标题】:Setting the position on a button in Python?在 Python 中设置按钮的位置?
【发布时间】:2012-06-07 07:11:42
【问题描述】:

我刚刚编写了一个代码,它创建了一个窗口(使用 TKinter)并显示一个工作按钮。

b = Button(master, text="get", width=10, command=callback)

但我想在这个下方有多个按钮。

如何设置按钮的行列? 我尝试添加row = 0, column = 0,,但这不起作用。

谢谢

【问题讨论】:

    标签: python tkinter row


    【解决方案1】:

    要使小部件出现,您需要使用 Tkinter 所谓的“几何管理器”来定位它。三位经理分别是gridpackplace。每个人都有优点和缺点。这三个管理器被实现为所有小部件上的方法。

    grid,顾名思义,非常适合在网格中放置小部件。您可以指定行和列、行和列跨度、填充等。

    例子:

    b = Button(...)
    b.grid(row=2, column=3, columnspan=2)
    

    pack 使用盒子比喻,让您沿着容器的一侧“打包”小部件。 pack 非常擅长全垂直或全水平布局。例如,小部件在水平线上对齐的工具栏是使用 pack 的好地方。

    例子:

    b = Button(...)
    b.pack(side="top", fill='both', expand=True, padx=4, pady=4)`
    

    place 是使用最少的几何管理器。使用 place 您可以指定小部件的确切 x/y 位置和确切宽度/高度。它有一些不错的功能,例如能够使用绝对坐标或相对坐标(例如:您可以将小部件放置在 10,10 或小部件宽度或高度的 50% 处)。

    gridpack 不同,使用place 不会导致父窗口小部件展开或折叠以适应已放置在其中的所有窗口小部件。

    例子:

    b = Button(...)
    b.place(relx=.5, rely=.5, anchor="c")
    

    使用这三个几何管理器,您几乎可以进行您能想象到的任何类型的布局。

    【讨论】:

    • 解释得很好!但是我怎样才能同时使用它们呢?
    • xy 是指在窗口内部还是外部的坐标?
    • @CoolCloud:坐标是相对于主窗口内部的。你可以设置bordermode属性来判断值是否包含边框。
    【解决方案2】:

    试试Grid Geometry Manager:

    btns = [
        (lambda ctl: ctl.grid(row=r, column=c) or ctl)(
            Button(text=str(1 + r * 3 + c)))
        for c in (0,1,2) for r in (0,1,2)]
    

    结果:

    [1][2][3]
    [4][5][6]
    [7][8][9]
    

    【讨论】:

    • -1 您的代码实例化了按钮,但您的变量btns 是一个无列表...
    • @FabienAndre,已修复!感谢您的评论!
    【解决方案3】:

    astynax 是对的。按照你给出的例子:

    MyButton1 = Button(master, text="BUTTON1", width=10, command=callback)
    MyButton1.grid(row=0, column=0)
    
    MyButton2 = Button(master, text="BUTTON2", width=10, command=callback)
    MyButton2.grid(row=1, column=0)
    
    MyButton3 = Button(master, text="BUTTON3", width=10, command=callback)
    MyButton3.grid(row=2, column=0)
    

    应该创建 3 行按钮。使用 grid 比使用 pack 好很多。但是,如果您在一个按钮上使用网格并在另一个按钮上打包,它将不起作用并且您会收到错误消息。

    【讨论】:

    • 我建议不要偏爱一个——了解每个人的长处,并为工作使用正确的工具。 Pack 对于特定类别的布局问题非常强大且容易,网格也是如此。他们每个人都比另一个人更容易解决一些问题。
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2017-03-03
    • 2021-11-13
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多