【Tkinter】ウィンドウサイズに合わせてリストボックス(Listbox)のサイズを自動的に変更する方法
TkinterのListbox(リストボックス)ウィジェットは、縦方向に項目が並んだスクロール可能なリストを表示するための部品です。ユーザーはこのウィジェットから、1つまたは複数の項目を選択できます。
Tkinterでは各ウィジェットは縦または横のいずれかに配置されますが、ウィンドウのサイズを変更したときに、ウィジェットの位置や大きさがうまく追従せず、レイアウト調整に悩むことがあります。
fill=BOTH と expand=True を使った解決策
この問題は、pack() メソッドに fill=BOTH と expand=True を指定することで解決できます。
- fill=BOTH:ウィジェットを縦・横の両方向に引き伸ばして表示領域を埋めます。
- expand=True:ウィンドウ内の余分なスペースが生じた場合に、その領域へウィジェットを拡張させます。
これら2つのプロパティを組み合わせることで、ウィンドウのリサイズに合わせてListboxの幅と高さが自動的に追従するようになります。
サンプルコード
# tkinterライブラリをインポート
from tkinter import *
# Tkinterフレーム(ウィンドウ)のインスタンスを作成
win = Tk()
# ウィンドウのサイズを設定
win.geometry("750x250")
# リストボックスウィジェットを作成
listbox = Listbox(win)
# fill=BOTH で縦横両方向に引き伸ばし、
# expand=True で利用可能な余白へ拡張
listbox.pack(padx=10, pady=10, fill=BOTH, expand=True)
# 項目を挿入
listbox.insert(1, "Python")
listbox.insert(2, "Java")
listbox.insert(3, "C++")
listbox.insert(4, "Rust")
listbox.insert(5, "GoLang")
listbox.insert(6, "C#")
listbox.insert(7, "JavaScript")
listbox.insert(8, "R")
listbox.insert(9, "Php")
# イベントループを開始
win.mainloop()実行結果
上記のコードを実行すると、プログラミング言語の一覧が表示されたリストボックスを持つウィンドウが起動します。

この状態でウィンドウの端をドラッグしてサイズを変更すると、Listboxもそれに合わせて幅と高さを維持したまま拡大・縮小されることが確認できます。
補足:gridレイアウトを使う場合
grid() を使用している場合は、columnconfigure() と rowconfigure() の weight を1以上に設定することで、同様にウィジェットをウィンドウサイズに追従させることが可能です。
-
【Python】Tkinterでウィンドウを画面の中央に配置する方法
Tkinterで作成したウィンドウを画面の中央に配置したいケースはよくあります。本記事では、tk::PlaceWindow メソッドを使った簡単な方法と、ジオメトリ(geometry)を計算してプログラム的に中央へ配置する方法の2つを紹介します。 方法1:tk::PlaceWindow を使う(最も簡単) Tkinterには、ウィンドウを画面中央に配置するための組み込みコマンド tk::PlaceWindow が用意されています。このメソッドに対象となるトップレベル(toplevel)ウィンドウを引数として渡し、配置位置として「center」を指定するだけで、ウィンドウを画面の中央に表示でき
-
Tkinterでウィンドウサイズの変更に合わせてボタンを動的にリサイズする方法
Pythonには、GUIアプリケーションを作成・開発するための豊富なライブラリが数多く用意されています。その中でもTkinterは、GUIベースのアプリケーション開発で最も広く使われているPython標準ライブラリの一つです。ウィジェットの追加をはじめ、アプリケーション構築に必要なさまざまな機能や属性を備えています。ボタンは、特定のタスクやイベントに割り当てることができるウィジェットです。しかし、ボタンのサイズや位置をウィンドウに合わせて動的に変更したい場合は、TkinterのGridモジュールを使ってレイアウトを設定します。ボタンを動的にリサイズするには、rowconfigure()メソッド