web-dev-qa-db-ja.com

Tkinter.gridの間隔オプション?

Tkinterは初めてで、グリッドレイアウトマネージャーを使用してアプリを作成してみました。しかし、自分の思い通りに活用する方法が見つからないようです。たとえば、セル(3,8)にラベルを配置したり、セル(5,1)にボタンを配置したりできるように、「セル」でいっぱいのグリッドをシミュレートする必要があります。これが私が試したことの例です:

import tkinter as tk
root = tk.Tk()

label = tk.Label(root, text = 'Label')
label.grid(column = 3, row = 8)

button = tk.Button(root, text = 'Button')
button.grid(column = 5, row = 1)

Tkinterは各ウィジェットの相対位置を保持します(つまり、buttonlabelの右上にあります)が、その間のスペースは無視します。この問題を少し検索してweightについて調べましたが、それは私が探しているものではないようです。 labelbuttonのレイアウトに依存しないものが欲しいのですが。助けてくれてありがとう!

5
PlatypusVenom

grid_columnconfigure および grid_rowconfigure メソッドを実行することにより、グリッド内の列/行(ウィジェットを含まないものを含む)の間隔を指定できます。ウィジェットの親(この場合、親はrootになります)。

たとえば、4番目の列の最小幅を設定するには、コードに最後の行を追加します。

import Tkinter as tk
root = tk.Tk()

label = tk.Label(root, text = 'Label')
label.grid(column = 3, row = 8)

button = tk.Button(root, text = 'Button')
button.grid(column = 5, row = 1)

root.grid_columnconfigure(4, minsize=100)  # Here

すべての列と行に最小サイズを設定する場合は、次を使用してすべてを繰り返すことができます。

col_count, row_count = root.grid_size()

for col in xrange(col_count):
    root.grid_columnconfigure(col, minsize=20)

for row in xrange(row_count):
    root.grid_rowconfigure(row, minsize=20)

編集興味深いことに、effbotは次のように述べています。

minsize =行の最小サイズを定義します。 行が完全に空の場合、このオプションが設定されていても表示されないことに注意してください。

(イタリック鉱山)しかし、私が試した限りでは、空の行と列でも機能するようです。

9
zehnpaard

デフォルトでは、行の高さはゼロ、列の幅はゼロです。したがって、何も含まれていない行と列は非表示になり、スペースを占有しません。

5
Bryan Oakley