Я научился обнаруживать закрытие окна с помощью WxPython, но у меня есть проблема. Когда я нажимаю «X» в правом верхнем углу, я ожидаю, что появится диалоговое окно с вопросом «Вы уверены, что хотите выйти?» И появляются 2 кнопки Да или нет. Это нормально. Но когда я нажимаю «Да», он должен закрыться, но когда я нажимаю «Нет», он не должен закрываться. Нет, работает нормально, но когда я нажимаю «Да», диалоговое окно закрывается и открывается снова, и я не могу закрыть основное приложение... Мне пришлось использовать диспетчер задач... Что я делаю неправильно? Пожалуйста, помогите мне! Вот моя функция закрытия:
def OnExit(self, event):
if event.GetEventType() == wx.EVT_CLOSE.typeId:
dial = wx.MessageDialog ( None, 'Are you sure you want to exit?', 'Exclamation',
wx.YES_NO | wx.ICON_EXCLAMATION )
if dial.ShowModal() == wx.ID_NO:
pass
else:
self.Close()
Пожалуйста, помогите мне! Любые ответы будут оценены!! Заранее спасибо!
В конце концов, вы звоните self.Close()
и, следовательно, создаете новое событие EVT_CLOSE, чтобы ввести вас в бесконечный цикл.And
, из-за структуры вашего оператора if
вы больше не можете закрыть программу с помощью File
->Quit
, используя меню.
Я бы предложил что-то в этом духе.
if event.GetEventType() == wx.EVT_CLOSE.typeId:
dial = wx.MessageDialog ( self, 'Are you sure you want to exit?', 'Exclamation',
wx.YES_NO | wx.ICON_EXCLAMATION )
if dial.ShowModal() == wx.ID_NO:
return
self.Destroy()
да, на самом деле я проголосовал за это, комментарий был сделан для поддержки того, что сказал код в вашем ответе
правильный метод закрытия wx.Frame — это wx.Frame.Destroy()