Created 2019年4月20日19:23
Updated 2019年4月20日19:29
Categories
Python
Googleとかで探すとroot.withdraw()
使えって言われますが、これだけだとWindowsでうまく動かなかったためいろいろと工夫してみました。
from tkinter import filedialog, Tk
import platform
# ダイアログ用のルートウィンドウの作成
root = Tk()
# ウィンドウサイズを0にする(Windows用の設定)
root.geometry("0x0")
# ウィンドウのタイトルバーを消す(Windows用の設定)
root.overrideredirect(1)
# ウィンドウを非表示に
root.withdraw()
system = platform.system()
def select_file():
# Windowsの場合withdrawの状態だとダイアログも
# 非表示になるため、rootウィンドウを表示する
if system == "Windows":
root.deiconify()
# macOS用にダイアログ作成前後でupdate()を呼ぶ
root.update()
# ダイアログを前面に
root.lift()
root.focus_force()
path_str = filedialog.askopenfilename()
root.update()
if system == "Windows":
# 再度非表示化(Windowsのみ)
root.withdraw()
path = Path(path_str)
return path.absolute()
root.withdraw()
はルートウィンドウを非表示にする関数です。
普通のtkinterアプリは何か元になるウィンドウから選択ダイアログを作りますが、ダイアログだけ出したいときはこの関数を使って非表示にします。
macOSではこれでうまくいきましたが、Windowsではファイル選択のダイアログも非表示になってしまいました。
そこで、Windowsに限りサイズが0でタイトルバーも消去した全く見えないウィンドウを表示し、その下にダイアログを作成しています。
正直macOSでもこれで良い気がしてきましたが、一応使えるならどっちか効けばいいかなーみたいな気持ちで残しています。