如何在同一行显示一系列小部件?

时间:2010-10-14 08:29:57

标签: python layout tkinter

我是tkinter的新手,我想知道我是否可以在同一行上显示一系列小部件,而不是将它们放在一列中的另一行之下。

我目前正在使用框架来放置我的组件,但是如果我在一个框架中有几个小部件(按钮),我宁愿直接放置按钮,而不是创建其他子框架。

1 个答案:

答案 0 :(得分:5)

您可以使用几何管理器在容器中布置小部件。 Tkinter的几何管理器是gridpackplace

grid 允许您按行和列布置小部件。 pack 允许您沿着框的两侧布置小部件(非常适合制作单个水平或垂直列)。 地点可让您使用绝对和相对定位。在实践中,很少使用地方。

在您的情况下,您希望创建一个水平的按钮行,通常通过创建表示行的框架,然后使用pack来并排放置小部件。不要害怕使用子帧进行布局 - 这正是它们的用途。

例如:

import Tkinter as tk

class App:
    def __init__(self):
        self.root = tk.Tk()
        # this will be the container for a row of buttons
        # a background color has been added just to make
        # it stand out.
        container = tk.Frame(self.root, background="#ffd3d3")

        # these are the buttons. If you want, you can make these
        # children of the container and avoid the use of "in_" 
        # in the pack command, but I find it easier to maintain
        # code by keeping my widget hierarchy shallow.
        b1 = tk.Button(text="Button 1")
        b2 = tk.Button(text="Button 2")
        b3 = tk.Button(text="Button 3")

        # pack the buttons in the container. Since the buttons
        # are children of the root we need to use the in_ parameter.
        b1.pack(in_=container, side="left")
        b2.pack(in_=container, side="left")
        b3.pack(in_=container, side="left")

        # finally, pack the container in the root window
        container.pack(side="top", fill="x")

        self.root.mainloop()

if __name__ == "__main__":
    app=App()