0

私のプログラムでは、キーボードやマウスのないシステムで物理ボタンを押さないようにユーザーに通知する必要があり、システムの準備が整ったときに消える待機メッセージをポップアップしたいだけです

4

1 に答える 1

5

ここにメッセージ ボックスが必要ない理由は 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()
于 2013-10-17T19:09:28.207 に答える