あなたの質問は、あなたがしようとしていることについて少し漠然としていますが、アプリケーションが何らかのタスクを実行している間、人々がダイアログを閉じないようにしたいと思っていると思います.
wx.CLOSE_BOX
は単なるスタイルです。ダイアログの作成を試してみましwx.CLOSE_BOX
たが、ダイアログの下部にあるボタンを変更するだけでした。設定しなくてもwx.CLOSE_BOX
、ウィンドウを閉じる [OK] ボタンがまだありました。それより、×ボタンは?Alt+F4 はどうですか?
あなたの最善の選択肢は、おそらく独自のカスタムパネルを作成し、独自の「閉じる」ボタンを作成してEnable(False)
から、プロセスが完了するまで呼び出すことです。ただし、これでも、ユーザーが X ボタンをクリックしたり、Alt+F4 を押したりするのを止めることはできません。そのためには、キャッチする必要がありますwx.EVT_CLOSE
。この例を見てください:
class CustomDialog(wx.Dialog):
def __init__(self, parent, title):
wx.Dialog.__init__(self, parent=parent, title=title)
self.closeButton = wx.Button(self,wx.ID_CLOSE,"Close")
self.closeButton.Enable(False) #initialize the button as disabled
self.Bind(wx.EVT_BUTTON, self.onClose, id=wx.ID_CLOSE)
self.Bind(wx.EVT_CLOSE, self.onClose)
#wx.EVT_CLOSE is triggered by the X button or Alt+F4
def onClose(self, event):
if self.closeButton.IsEnabled():
#if we want to allow the user to close the dialog
#do something
event.Skip() #allow this event to close the window
def reenableButtom(self):
self.closeButton.Enable(True)
self.reenableButton()
その後、プロセスが終了したときに手動で呼び出すか、イベントにバインドできます。
ボタンにバインドされているだけself.closeButton.IsEnabled()
ではないことに注意してください。self.onClose()
ユーザーが [閉じる] ボタンをクリックした場合でも、[X] ボタンをクリックした場合でも、Alt+F4 キーを押した場合でも、ダイアログが同じように動作するようにしたいと考えています。event.Skip()
偶数を上方に伝搬させます。伝播を許可wx.EVT_CLOSE
すると、ダイアログが閉じます。したがって、ウィンドウを閉じたい場合を除き、この行を呼び出さないことが非常に重要です。