您的问题对您要执行的操作有点含糊,但我假设您想阻止人们在您的应用程序执行某些任务时关闭您的对话框。
wx.CLOSE_BOX
只是一种风格。我尝试创建有和没有的对话框,wx.CLOSE_BOX
它所做的只是改变对话框底部的按钮。即使我没有设置wx.CLOSE_BOX
,仍然有一个确定按钮可以关闭窗口。除此之外,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
传播将关闭对话框。因此,除非我们想关闭窗口,否则不要调用此行,这一点非常重要。