4

Tkinterプログラムのレイアウトに行を使用しています。私は通常packを使用するので、ボタンは自動的に配置され、重なり合わず、行を使用し、ボタンは重なり合っています。また、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()
4

2 に答える 2

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()

各ボタンはフレーム内の独自の列に配置され、フレームはメインコンテナの下部に配置されます。

于 2012-11-11T09:12:29.383 に答える
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

于 2012-11-12T07:59:52.477 に答える