web-dev-qa-db-ja.com

Python Tkinter-ウィンドウ内でウィジェットのサイズを均等に変更する

PythonとTkinterの両方を学習しているので、小さなテストPythonアプリがあり、ラベルのグリッドのサイズを均等に変更する方法を見つけようとしています。ウィンドウ。さまざまな色の正方形の大きなグリッドを作成したいので、背景色が設定されたラベルを使用して正方形を作成します。ユーザーがウィンドウを拡大したときに正方形のサイズを自動的に変更してから、サイズを変更します。ウィンドウのサイズを小さくしたときに、すべて同じサイズに縮小します。

このようなもの:

Default "square" size. Opens up at this size by default.

これは、次のようにサイズ変更とスケーリングを均等に行います。

Size when the window is expanded in size.

言い換えると、各ラベルは、ウィンドウの拡大縮小に合わせてすべて均一に拡大縮小する必要があります。 「ウィンドウ」と「ウィジェット」で正しい用語を使用しているかどうかさえわかりません。しかし、私はGUIにラベルを付けています。

これを機能させるために使用しているテストコード:

    import Tkinter

class simpleapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()

        label = Tkinter.Label(self,anchor="center",bg="green")
        label.grid(column=0,row=0,sticky='EW')

        label2 = Tkinter.Label(self,anchor="center",bg="black")
        label2.grid(column=1,row=0,sticky='EW')

        label3 = Tkinter.Label(self,anchor="center",bg="red")
        label3.grid(column=2,row=0,sticky='EW')

        label4 = Tkinter.Label(self,anchor="center",bg="purple")
        label4.grid(column=0,row=1,sticky='EW')

        label5 = Tkinter.Label(self,anchor="center",bg="blue")
        label5.grid(column=1,row=1,sticky='EW')

        label6 = Tkinter.Label(self,anchor="center",bg="yellow")
        label6.grid(column=2,row=1,sticky='EW')


        self.grid_columnconfigure(0,weight=0)

if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.title("Test App")
    app.mainloop()
14
user1340081

すべての行と列に同じゼロ以外の重みを与えます。

例えば:

self.grid_columnconfigure(0,weight=1)
self.grid_columnconfigure(1,weight=1)
self.grid_columnconfigure(2,weight=1)
self.grid_rowconfigure(0,weight=1)
self.grid_rowconfigure(1,weight=1)
14
Bryan Oakley

Bryan Oakley によって提供される answer を完了すると、python 3)でそれを解決するためのコードは次のようになります。

ウィンドウのサイズ変更の比率を管理する1つのオプションは、関数grid_columnconfigure(1,weight=1)grid_rowconfigure(1,weight=1)の重みパラメーターを異なる値に設定することであることに注意してください。

import tkinter

class simpleapp_tk(tkinter.Tk):
    def __init__(self,parent):
        tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()

        label = tkinter.Label(self,anchor="center",bg="green")
        label.grid(column=0,row=0,sticky='NSEW')

        label2 = tkinter.Label(self,anchor="center",bg="black")
        label2.grid(column=1,row=0,sticky='NSEW')

        label3 = tkinter.Label(self,anchor="center",bg="red")
        label3.grid(column=2,row=0,sticky='NSEW')

        label4 = tkinter.Label(self,anchor="center",bg="purple")
        label4.grid(column=0,row=1,sticky='NSEW')

        label5 = tkinter.Label(self,anchor="center",bg="blue")
        label5.grid(column=1,row=1,sticky='NSEW')

        label6 = tkinter.Label(self,anchor="center",bg="yellow")
        label6.grid(column=2,row=1,sticky='NSEW')


        self.grid_columnconfigure(0,weight=1)
        self.grid_columnconfigure(1,weight=1)
        self.grid_columnconfigure(2,weight=1)
        self.grid_rowconfigure(0,weight=1)
        self.grid_rowconfigure(1,weight=1)


if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.title("Test App")
    app.mainloop()
6
aturegano