Tkinterで(クリック可能なセル効果を実現するために)ボタンのグリッドを作成しようとしています。
私の主な問題は、grid
とボタンを自動サイズ変更して親ウィンドウに合わせることができないことです。
たとえば、グリッド上に多数のボタンがある場合、グリッドがウィンドウ内に収まるようにボタンを縮小するのではなく、画面外に伸びるフレームが表示されます。
私が探している効果は、利用可能なすべてのスペースをグリッドで埋め、そのスペースに収まるようにセルのサイズを変更することです。私はドキュメントを読みましたが、それをどのように機能させるかはまだわかりません。
これは私の出発点である基本的なコードです:
def __init__(self):
root = Tk()
frame = Frame(root)
frame.grid()
#some widgets get added in the first 6 rows of the frame's grid
#initialize grid
grid = Frame(frame)
grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2)
#example values
for x in range(60):
for y in range(30):
btn = Button(grid)
btn.grid(column=x, row=y)
root.mainloop()
行と列に非ゼロの重みを設定して、余分なスペースを占有するようにする必要があります。
for x in range(60):
Grid.columnconfigure(grid, x, weight=1)
for y in range(30):
Grid.rowconfigure(grid, y, weight=1)
また、ボタンを構成して、セルに合わせて拡大:
btn.grid(column=x, row=y, sticky=N+S+E+W)
これは最後まで行う必要があるため、完全な例を示します。
from tkinter import *
root = Tk()
frame=Frame(root)
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0, sticky=N+S+E+W)
grid=Frame(frame)
grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2)
Grid.rowconfigure(frame, 7, weight=1)
Grid.columnconfigure(frame, 0, weight=1)
#example values
for x in range(10):
for y in range(5):
btn = Button(frame)
btn.grid(column=x, row=y, sticky=N+S+E+W)
for x in range(10):
Grid.columnconfigure(frame, x, weight=1)
for y in range(5):
Grid.rowconfigure(frame, y, weight=1)
root.mainloop()
@ Vaughn Catoがここで素晴らしい答えを出しました 。ただし、彼の例には、誤って多数の無関係なコードが含まれています。以下は、クリーンアップされ、より組織化された完全な例です。
from tkinter import *
#Create & Configure root
root = Tk()
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
#Create & Configure frame
frame=Frame(root)
frame.grid(row=0, column=0, sticky=N+S+E+W)
#Create a 5x10 (rows x columns) grid of buttons inside the frame
for row_index in range(5):
Grid.rowconfigure(frame, row_index, weight=1)
for col_index in range(10):
Grid.columnconfigure(frame, col_index, weight=1)
btn = Button(frame) #create a button inside frame
btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)
root.mainloop()
スクリーンショット:
最初に開くとき(小さい):
ウィンドウを最大化した後:
ウィンドウが最大化されたときにボタンを拡大するには、次のようにbutton.gridエントリを変更します。
btn.grid(column=x, row=y, sticky=N+S+E+W)