私のプログラムでは、キーボードやマウスのないシステムで物理ボタンを押さないようにユーザーに通知する必要があり、システムの準備が整ったときに消える待機メッセージをポップアップしたいだけです
1 に答える
ここにメッセージ ボックスが必要ない理由は 2 つあります。
まず、メッセージ ボックスの要点は、それがいくつかの標準化されたボタンを備えたモーダル ダイアログであり、これらのボタンは必要ないということです。
第 2 に、モーダル ダイアログの要点は、それがモーダルであることです。それは、独自のイベント ループを実行し、ダイアログが閉じられるまで戻りません。これは、(バックグラウンド スレッドを使用していない限り) アプリは表示中に何もできないことを意味します。
最初の問題は簡単に解決できます。tkMessageBox
の単純なラッパーtkCommonDialog.Dialog
です。ソースを見て、目的のダイアログ ボックスを簡単に作成できることを確認してください。しかし、 (名前の由来)tkSimpleDialog.Dialog
よりもさらに単純です。tkCommonDialog
例えば:
class WaitDialog(tkSimpleDialog.Dialog):
def __init__(self, parent, title, message):
self.message = message
Dialog.__init__(self, parent, title=title, message=message)
def body(self, master):
Label(self, text=self.message).pack()
def buttonbox(self):
pass
def wait(message):
WaitDialog(root, title='Wait', message=message)
ボタンのないモーダル ダイアログを作成するのに必要なのはそれだけです。詳細については、ダイアログ ウィンドウとソースを参照しtkSimpleDialog
てください。
2 番目の問題はさらに簡単に解決できます。モーダル ダイアログが必要ない場合は、単純な古いToplevel
. にしたい場合があるtransient
ので、マスターの上にとどまり、マスターと一緒に非表示にし、タスクバーに表示しないなど、その他のあらゆる種類の設定を行うことができます。しかし、基本的には、次のように単純です。
def wait(message):
win = Toplevel(root)
win.transient()
win.title('Wait')
Label(win, text=message).pack()
return win
これで、呼び出しwait()
て実行を続けることができます:
def wait_a_sec():
win = wait('Just one second...')
root.after(1000, win.destroy)
root = Tk()
button = Button(root, text='do something', command=wait_a_sec)
root.mainloop()