TkinterでToplevelウィンドウの位置(座標)を取得する方法
Tkinterアプリケーションでは、placeメソッドを使うことで、フレーム内の任意の位置にウィジェットを配置できます。本記事では、placeメソッドによるウィジェットの中央配置と、Toplevelウィンドウの現在位置(座標)を取得する方法について、具体的なコード例を交えて解説します。
実装手順
- 必要なライブラリをインポートし、tkinterフレームのインスタンスを作成します。
- win.geometryメソッドを使用して、ウィンドウのサイズを設定します。
- 次に、ボタンを作成してラベル(表示テキスト)を設定します。
- placeメソッドにx座標・y座標の値を渡すことで、ボタンの位置を指定します。
- ウィジェットの中心を相対座標0.5の位置(relx=0.5, rely=0.5)に配置し、「anchor=CENTER」を指定してアンカーを中央に設定します。
- 最後に、アプリケーションウィンドウのmainloopを実行します。
サンプルコード
# Tkinterライブラリをインポート
from tkinter import *
from tkinter import ttk
# Tkinterフレームのインスタンスを作成
win = Tk()
# ウィンドウサイズを定義
win.geometry("750x350")
win.title("Main Window")
def toplevel_position():
print("Toplevelウィンドウの座標:", top.winfo_x(), top.winfo_y())
top = Toplevel(win, height=150, width=300)
top.title("This is the Toplevel Window")
top.attributes('-topmost', 'true')
button = ttk.Button(top, text="Get position", command=toplevel_position)
button.place(relx=0.5, rely=0.5, anchor=CENTER)
top.mainloop()
実行結果
このコードを実行すると、次のような出力ウィンドウが表示されます。

ここで「Get position」ボタンをクリックすると、コンソール上にToplevelウィンドウの現在の座標が出力されます。
Toplevelウィンドウの座標: 282 105
ポイント解説
Toplevelウィンドウの位置は、winfo_x()およびwinfo_y()メソッドによって取得できます。これらはそれぞれ、ウィンドウ左上隅の画面上におけるX座標とY座標をピクセル単位で返します。また、attributes('-topmost', 'true')を指定することで、対象ウィンドウを常に最前面に表示させることができます。ボタンの配置にはrelxとrelyによる相対座標を使用しているため、ウィンドウサイズが変わってもボタンは常に中央に配置されます。
-
Tkinterでウィンドウを常に最前面に表示する方法
Tkinterアプリケーションを開発していると、作成したウィンドウ(ルートウィンドウ)を他のすべてのウィンドウよりも前面に表示したい場面があります。例えば、通知ウィンドウや常にユーザーに見せておきたいツールなどが該当します。このような場合には、attributes() メソッドを使用します。このメソッドは2つの引数を受け取ります。1つ目は「-topmost」という属性名、2つ目はそれを有効にするかどうかを指定するブール値(True / False)です。コード例# ライブラリのインポート from tkinter import * # Tkinterウィンドウ(フレーム)のインスタンスを作成
-
Tkinterウィンドウを常に他のウィンドウの最前面に表示する方法
GUIプログラムを作成する際、Tkinterのウィンドウはデフォルトでは他のアプリケーションの背後に表示されることがあります。つまり、プログラムを実行しても、そのウィンドウが他のソフトウェアの裏側に隠れてしまうケースがあるのです。 Tkinterウィンドウを常に他のウィンドウより前面に表示させたい場合は、attributes(-topmost, True) プロパティを使用します。この設定を行うことで、ウィンドウが最前面に固定され、ユーザーが他のアプリケーションを操作している間も、常に手前に表示され続けるようになります。 コード例 # ライブラリのインポート from tkinter impo