Tkinterでウィジェットをスティッキーフレームの中央に配置する方法
Tkinterには、ウィジェットのプロパティを柔軟に設定するための組み込み関数やメソッドが数多く用意されています。これらのプロパティは、採用するジオメトリマネージャーによって挙動が異なります。中でもgridジオメトリマネージャーは、アプリケーション開発で直面しがちな複雑なレイアウト問題を解決できる強力な仕組みです。gridジオメトリマネージャーを使用すると、ウィジェット同士が重なることなく、指定されたスペース内にすべてのウィジェットを整然と配置できます。
スティッキーフレーム内でウィジェットを中央に配置する考え方
ここでは、gridジオメトリマネージャーで作成したスティッキー(sticky)なフレームの中に、Labelウィジェットのテキストを中央に配置するケースを考えてみましょう。
まず最初に行うべきは、rowとcolumnのプロパティを設定し、メインウィンドウ自体をスティッキー状態にすることです。メインウィンドウがフレームに対してスティッキーになれば、内部のウィジェットを柔軟にリサイズできるようになります。同時に、Labelウィジェット側もsticky属性を有効にしておく必要があります。
その上で、ウィジェットを中央に配置するために、row・column・weightの値を適切に指定します。特にweightを1以上に設定することが重要で、これによりウィンドウサイズが変更されてもウィジェットが常に中央位置に保たれるようになります。
コード例
# 必要なライブラリをインポート
from tkinter import *
# tkinterフレームのインスタンスを作成
win= Tk()
# ウィンドウのサイズを設定
win.geometry("700x350")
# フレームを追加してウィンドウのサイズを定義
frame= Frame(win, relief= 'sunken')
frame.grid(sticky= "we")
# すべてのケースでフレームをスティッキーにする
frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)
# すべてのケースでウィンドウをスティッキーにする
win.grid_rowconfigure(0, weight=1)
win.grid_columnconfigure(0, weight=1)
# ラベルウィジェットを追加
label= Label(frame, text= "Hey Folks! Welcome to Tutorialspoint",
font=('Helvetica 15 bold'), bg= "white")
label.grid(row=3,column=0)
label.grid_rowconfigure(1, weight=1)
label.grid_columnconfigure(1, weight=1)
win.mainloop()
実行結果
上記のコードを実行すると、スティッキーフレームの中央にラベルテキストが表示されます。ウィンドウのサイズを変更しても、ラベルは常に中央位置に保たれることを確認できます。

-
Tkinterでテキストウィジェットにスクロールバーを追加する方法
Tkinterのテキストウィジェット(Text Widget)は、複数行にわたるユーザー入力を受け付けるためのウィジェットです。エントリーウィジェット(Entry Widget)とよく似ていますが、最大の違いはテキストウィジェットが複数行のテキスト入力をサポートしている点にあります。テキストウィジェットを作成するには、まずテキストオブジェクトをインスタンス化します。 複数行のテキストを扱う場合、内容がウィジェットの表示領域を超えることがあるため、スクロールバーの追加が不可欠です。テキストウィジェットにスクロールバーを追加するには、ScrolledText(root) 関数を使用します。この関数
-
Tkinterでウィジェットを非表示にする方法|pack_forget()の使い方を解説
Tkinterアプリケーションでウィジェットを一時的に非表示にしたい場合、pack_forget()メソッドを使用します。このメソッドは、ウィンドウ上からウィジェットのマッピングを解除し、画面から見えなくするために広く使われています。pack_forget()メソッドとはpack_forget()は、pack()ジオメトリマネージャーで配置されたウィジェットを非表示にするためのメソッドです。非表示にされたウィジェットは破棄されるわけではなく、再びpack()を呼び出せば元の状態で再表示できるのが特徴です。サンプルコード以下の例では、ラベルテキストとボタンを作成し、ボタンをクリックするとラベルが