【Python tkinter】アプリのウィンドウを非表示・再表示する方法:withdraw、deiconify

時計 2022.05.18 / 時計

【Python tkinter】アプリのウィンドウを非表示・再表示する方法:withdraw、deiconify

本記事ではPythonのtkinterにおける、アプリのウィンドウ非表示再表示する方法について解説していきます。

tkinterで表示したウィンドウを非表示にするにはwithdraw()メソッドを利用し、再度表示するにはdeiconify()メソッドを利用します。

ぜひこれらのメソッドを応用して、使い勝手の良いGUIアプリケーションを作成できるようになりましょう。

tkinterとは

tkinterとはGUIアプリケーションを開発するために利用されるPythonの標準モジュールです。数多くGUIアプリケーション用のモジュールは存在しますが、tkinterは別途インストールが必要ない唯一のGUI作成用モジュールです。

tkinterを使ったGUIアプリはクロスプラットフォームなので、OSを気にすることなく作成したアプリを使用できます。

tkinterの基本的な使い方については以下記事をご参照ください。

アプリのウィンドウを非表示にする:withdraw()メソッド

tkinterで表示したウィンドウを非表示にするにはwithdraw()メソッドを非表示にしたいウィジェットに使用します。

構文

widget.withdraw()

iconify()メソッドと似ていますが、iconify()はウィンドウを最小化するのに対して、withdraw()は非表示にします。そのため再表示のメソッドを使用しない限り、画面上に再度表示されることはなくなります。

またdestroy()メソッドと混同される方もいますが、destroy()メソッドではアプリを非表示にするのではなく終了させてしまいます。withdraw()とdestroy()の違いに注意してください。

アプリのウィンドウを表示する:deiconify()メソッド

tkinterで非表示にしたウィンドウを再度表示するにはdeiconify()メソッドを非表示にしたウィジェットに使用します。

構文

widget.deiconify()

withdraw()を使ったら必ずdeiconify()を使って再表示するようにしましょう。

サンプルプログラム:定期的に表示する警告メッセージ

ここでは定期的に警告メッセージを表示するサンプルプログラムを作成していきます。内容としてはパソコンを起動してから10分経つとメッセージ(姿勢を正してください)が表示され、メッセージを消してから10分経過すると再度同じメッセージが表示し続けるというプログラムになります。

Pythonで作成したスクリプトはpyinstallerを利用してexe化(Windows環境における実行形式のファイルに)します。これによりPythonがインストールされていないクライアントでもプログラムを実行できます。pyinstallerによるexe化の方法は以下記事をご参照ください。

exe化したプログラムはパソコンの起動時に走らせます。そのためスタートアップにプログラムを追加しておきます。スタートアップへの追加方法は以下記事をご参照ください。

IT用語の確認

スタートアップとはWindowsに備わっている機能で、登録されているアプリやプログラムをパソコン起動時に立ち上げる仕組みです

プログラムは以下のように記述します。

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

def click_close():
    root.withdraw()
    time.sleep(600)
    root.deiconify()
# rootメインウィンドウの設定
time.sleep(600)
root = tk.Tk()
root.title("window close event")
root.geometry("300x50")

# メインフレームの作成と設置
frame = ttk.Frame(root)
frame.grid(column=0, row=0, sticky=tk.NSEW, padx=5, pady=10)

# 各種ウィジェットの作成
label = ttk.Label(frame, text="姿勢を正してください")

# 各種ウィジェットの設置
label.grid(row=0, column=0)

root.protocol("WM_DELETE_WINDOW", click_close)
root.mainloop()

上記ではプロトコルのWM_DELETE_WINDOWを使って、ウィンドウが「×」で閉じられようとした際にclick_close()関数を実行して、閉じられないようにしています。プロトコルのWM_DELETE_WINDOWについては以下記事をご参照ください。

click_close()関数ではwithdraw()でアプリを非表示にし、10分後にdeiconify()で再表示しています。

まとめ

本記事「【Python tkinter】アプリのウィンドウを非表示・再表示する方法:withdraw、deiconify」はいかがでしたか。

ここで紹介したメソッドは、様々な場面で活躍してくれます。ぜひ実際に利用して、仕事で役に立つGUIアプリケーションを作成してください。