0

こんにちはみんなはすべてを試しました、そして今私はあなたの提案を求めています。

メッセージボックスを非表示にできません。

コードは次のとおりです。

    ans = wx.MessageBox("length = %s , height = %s " % (str(len), str(ht)))

    if ans = wx.Yes:

        subprocess.call("pword | sudo -S ./Install.sh %s %s" % (str(len),str(ht)))    

3行目が完了するまでに約6〜7分かかります。その時間のメッセージボックスが画面に表示されるまで、インストールプロセスが完了するまで非表示にします。非表示、将来の呼び出し、閉じる、無効にしようとしましたが、取得するたびに'intオブジェクトに属性""がありません。

4

2 に答える 2

0

メッセージボックスをさらに制御する必要がある場合は、代わりにメッセージダイアログを使用してください。メッセージボックスは回答を直接返すため、ウィンドウを制御することはできません。メッセージダイアログを作成すると、ウィンドウを制御できます。

簡単な例を次に示します。

import wx

app = wx.App(False)
box = wx.MessageDialog(None, 'Yes or No?', caption='Dialog Title', style=wx.YES_NO | wx.YES_DEFAULT)
result = box.ShowModal()
box.Destroy()
if result == wx.ID_YES:
    print 'yes'
else:
    print 'no'
于 2013-02-23T06:29:03.677 に答える
0

メッセージ ボックスはwxMessageBox()、戻ってくるまでに非表示にして破棄する必要があります。ここで何か他のことが起こっているに違いありません。

一般に、保留中のすべてのイベントが処理されたことを確認したい場合 (したがって、再描画/サイズ変更/閉じる必要のあるすべてのウィンドウが実際に処理された場合)、 を使用wx.CallAfter()して、長時間実行プロセスを少し遅れて起動します。

もちろん、GUI プログラムから数分かかるブロッキング操作を実行することは、とにかく悪い考えですが、これは別の話です...

于 2013-02-23T12:59:00.333 に答える