你的問題有點含糊不清你想要做什麼,但我假設你想防止人們在應用程序執行某些任務時關閉對話框。
wx.CLOSE_BOX
只是一種風格。我試驗過在有和沒有wx.CLOSE_BOX
的情況下創建對話框,它所做的只是更改對話框底部的哪些按鈕。即使我沒有設置wx.CLOSE_BOX
,仍然有一個OK按鈕可以關閉窗口。除此之外,X按鈕怎麼樣?那麼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
傳播將關閉對話框。因此,除非我們想關閉窗口,否則我們不會稱這條線是非常重要的。
到目前爲止,我所知道的,所有的WX。CLOSE_BOX是否指定了「關閉」和「幫助」按鈕,而不是「確定」和「取消」。你能否詳細說明你想要完成什麼? – acattle