【Python Tkinter】画面(ウィンドウ)を最前面・最背面に移動させる方法

時計 2020.12.05 / 時計

【Python Tkinter】画面(ウィンドウ)を最前面・最背面に移動させる方法

PythonでGUIアプリケーションの作成には、標準ライブラリのTkinterをよく使用しています。

私が作成するGUIアプリでは、いくつかの画面(ウィンドウ)を同時に表示させて、それぞれで別の表示や操作ができるようにすることがあります。

その際に、特定の画面を最前面・最背面に移動させる、または起動中は常にウィンドウを前に表示しておきたい場合でも、Tkinterには簡単にそれを実現させる方法があります。

本記事では、PythonのTkinterによる、画面(ウィンドウ)を最前面最背面に移動させる方法について詳しく解説していきます。

GUIアプリ開発で役に立つ知識なので、ぜひマスターしてください。

Tkinterの基本的な使い方がわからない方は以下記事をご参考ください。

サンプルプログラム

本記事では以下に示すサンプルプログラムを使って、画面を最前面に移動させる方法を解説していきます。

# sample.py
# tkinterのインポート
import tkinter as tk
import tkinter.ttk as ttk

def execute():
    return ''

def display():
    # appメインウィンドウの設定
    app = tk.Tk()
    app.title("New application")
    app.geometry("300x100")

    # メインフレームの作成と設置
    frame_app = ttk.Frame(app)
    frame_app.pack(fill = tk.BOTH, pady=10)

    # 各種ウィジェットの作成
    button_execute = ttk.Button(frame_app, text="メインウィンドウを最前面へ", command=execute)

    # 各種ウィジェットの設置
    button_execute.pack()

    app.mainloop()

# rootメインウィンドウの設定
root = tk.Tk()
root.title("tkinter application")
root.geometry("300x100")

# メインフレームの作成と設置
frame = ttk.Frame(root)
frame.pack(fill = tk.BOTH, pady=10)

# 各種ウィジェットの作成
button_display = ttk.Button(frame, text="ウィンドウ作成", command=display)

# 各種ウィジェットの設置
button_display.pack()

root.mainloop()

上記のサンプルプログラムをコピペして起動してみてください。

起動すると以下のウィンドウが表示されます。

tkinter:最前面・最背面サンプルプログラム

「ウィンドウ作成」ボタンを押下すると別ウィンドウが生成されます。

tkinter:最前面・最背面サンプルプログラム(別ウィンドウ生成)

新しく作成されたウィンドウがメインよりも前面に表示されることがわかります。
ここで、「メインウィンドウを最前面へ」ボタンを押下すると、メインウィンドウを最前面に移動できるようにexecute関数に追記していきます。

画面(ウィンドウ)を最前面に移動させる方法

lift()メソッド

対象ウィンドウに対してlift()メソッドを使用すると、そのウィンドウを最前面に移動することができます。

    window.lift()

以下のようにサンプルプログラムのexecute関数に追記することで、メインウィンドウを最前面に移動させるプログラムは完成します。

def execute():
    root.lift()

attributes()メソッド

対象ウィンドウに対してattributes()メソッドを使用し、引数に「-topmost」を指定することで最前面に移動させることができます。

    window.attributes("-topmost", True or False)

以下のようにサンプルプログラムのexecute関数に追記することで、メインウィンドウを最前面に移動させるプログラムは完成します。

def execute():
    root.attributes("-topmost", True)
    root.attributes("-topmost", False)

一時的に対象ウィンドウを最前面にしたい場合は、必ずattributes("-topmost", True)で最前面に移動させた後で、attributes("-topmost", False)を行ってください。

理由は次の項目で説明いたします。

常に画面(ウィンドウ)を最前面に表示する

どの画面よりも、対象ウィンドウを最前面に常に表示させるには以下のようにします。

def execute():
    root.attributes("-topmost", True)

attributes("-topmost", True)にすることで、対象ウィンドウはFalseに変更しない限り、常に最前面で表示されます。

画面(ウィンドウ)を最背面に移動させる方法

lower()メソッド

対象ウィンドウに対してlower()メソッドを使用すると、そのウィンドウを最背面に移動することができます。

以下のようにサンプルプログラムのexecute関数に追記することで、appウィンドウを背面に移動させ、メインウィンドウを前面に出すようにしています。

def execute():
    app.lower()

また今回のサンプルプログラムの場合、execute()関数内でappウィンドウ操作ができるようにdisplay()関数内でglobal処理をしておくことも忘れないでください。

def display():
    # appメインウィンドウの設定
    global app

まとめ

Tkinterでの画面(ウィンドウ)を最前面・最背面に移動させる方法はいかがでしたか。

本記事で紹介した方法で、ユーザーの使い勝手の良いアプリ開発を進めていってください。

また今回紹介した方法はWindowsでは成功していますが、Mac環境ではうまくいかない場合がございますので、ご了承くださいませ。