17

ウィンドウを (TKinter を使用して) 作成し、機能するボタンを 1 つ表示するコードを作成しました。

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

しかし、このボタンの下に複数のボタンが必要です。

ボタンの行と列をどのように設定しますか? 追加しようとしましrow = 0, column = 0,たが、うまくいきません。

ありがとう

4

3 に答える 3

51

ウィジェットを表示するには、Tkinterが「ジオメトリマネージャー」と呼ぶものを使用してウィジェットを配置する必要があります。3つのマネージャーは、グリッドパック、および配置です。それぞれに長所と短所があります。これらの3つのマネージャーは、すべてのウィジェットのメソッドとして実装されます。

グリッドは、その名前が示すように、グリッドにウィジェットを配置するのに最適です。行と列、行と列のスパン、パディングなどを指定できます。

例:

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

packはボックスのメタファーを使用して、コンテナの側面の1つに沿ってウィジェットを「パック」できるようにします。パックは、すべて垂直またはすべて水平のレイアウトで非常に優れています。たとえば、ウィジェットが水平線上に配置されているツールバーは、パックを使用するのに適した場所です。

例:

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

placeは、最も使用されていないジオメトリマネージャです。場所を使用して、ウィジェットの正確なx/y位置と正確な幅/高さを指定します。絶対座標または相対座標のいずれかを使用できるなど、いくつかの優れた機能があります(たとえば、ウィジェットをウィジェットの幅または高さの10、10、または50%に配置できます)。

gridおよびとは異なりpack、を使用placeしても、内部に配置されているすべてのウィジェットに合わせて親ウィジェットが展開または折りたたまれることはありません。

例:

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

これらの3つのジオメトリマネージャを使用すると、想像できるほぼすべてのタイプのレイアウトを実行できます。

于 2012-06-07T18:35:00.307 に答える
16

アスティナックスは正しいです。あなたが与えた例に従うには:

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列のボタンを作成する必要があります。グリッドを使用すると、パックを使用するよりもはるかに優れています。ただし、あるボタンでグリッドを使用し、別のボタンでパックすると、機能せず、エラーが発生します。

于 2012-06-07T10:04:13.400 に答える
4

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]
于 2012-06-07T07:43:59.180 に答える