web-dev-qa-db-ja.com

Pythonでボタンの位置を設定しますか?

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

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

しかし、このボタンの下に複数のボタンがあります。

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

ありがとう

17
EatMyApples

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

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

16
Carto_

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

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

例:

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

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

例:

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つのジオメトリマネージャーを使用すると、想像できるあらゆる種類のレイアウトを実行できます。

47
Bryan Oakley

試してみてください 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]