如何在Tkinter上排列按钮

时间:2012-11-11 08:46:05

标签: python tkinter

我正在使用行来布局我的Tkinter程序。 我通常使用包装,所以我的按钮会自动放置而不是重叠,使用行,我的按钮重叠,我必须通过更改其padx值来对齐它们。我想知道是否有更简单的方法来做到这一点。

from sys import argv
from Tkinter import *
from PIL import Image, ImageTk, ImageFilter
import random

script, infile = argv

class MyApp(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("ImagePro")

        # Original
        original = Image.open(infile)
        (w, h) = (original.size[0], original.size[1])
        tkpi = ImageTk.PhotoImage(original)
        label = Label(self.root, image=tkpi)
        label.grid(row =0, column=0, padx=5,pady=5)

        img = original.copy().convert("L")
        tkpi2 = ImageTk.PhotoImage(img)
        label = Label(self.root, image=tkpi2)
        label.grid(row =0, column=1, padx=5,pady=5)

        Label(self.root, text = "Original").grid(row=1, column=0)
        Label(self.root, text = "Modified").grid(row=1, column=1)
        Button(self.root, text = "Brighten").grid(row=2, column=0, sticky=W)
        Button(self.root, text = "Darken").grid(row=2, column=0, sticky=W, padx=60)
        Button(self.root, text = "Warm").grid(row=2, column=0, sticky=W, padx=112)
        Button(self.root, text = "Cool").grid(row=2, column=0, sticky=W, padx=158)

        self.root.mainloop()


MyApp()

2 个答案:

答案 0 :(得分:6)

要执行此操作,您需要开始使用框架。框架充当窗口小部件的容器。将所有按钮添加到框架,然后将该框架添加到根容器。

class MyApp(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("ImagePro")

        #Original
        original = Image.open(infile)
        (w, h) = (original.size[0], original.size[1])
        tkpi = ImageTk.PhotoImage(original)
        label = Label(self.root, image=tkpi)
        label.grid(row =0, column=0, padx=5,pady=5)

        img = original.copy().convert("L")
        tkpi2 = ImageTk.PhotoImage(img)
        label = Label(self.root, image=tkpi2)
        label.grid(row =0, column=1, padx=5,pady=5)

        Label(self.root, text = "Original").grid(row=1, column=0)
        Label(self.root, text = "Modified").grid(row=1, column=1)

        self.buttonframe = Frame(self.root)
        self.buttonframe.grid(row=2, column=0, columnspan=2)        
        Button(self.buttonframe, text = "Brighten").grid(row=0, column=0)
        Button(self.buttonframe, text = "Darken").grid(row=0, column=1)
        Button(self.buttonframe, text = "Warm").grid(row=0, column=2)
        Button(self.buttonframe, text = "Cool").grid(row=0, column=3)

        self.root.mainloop()

每个按钮都在框架内的自己的列中,框架位于主容器的底部。

答案 1 :(得分:0)

如果您对多个小部件使用相同的row,column对,它们将出现在网格的同一单元格中。因此,这样的事情应该成功。

Button(self.root, text = "Brighten").grid(row=2, column=0)
Button(self.root, text = "Darken").grid(row=2, column=1)
Button(self.root, text = "Warm").grid(row=2, column=2)
Button(self.root, text = "Cool").grid(row=2, column=3)

您可以找到有关grid几何经理http://effbot.org/tkinterbook/grid.htm

的此文档的详细信息