wxPython MessageDialog - Как запросить статус?

Я использую wxTimer, который я хотел бы остановить перед открытием MessageDialog и перезапустить, когда MessageDialog будет закрыт.

Как бы я это сделал? Я не нашел никакого метода, который сказал бы мне, был ли диалог закрыт или нет.

В настоящее время таймер в основном просто тикает, и все больше и больше окон открываются при каждом тике:(

Надеюсь, ты сможешь мне помочь. Спасибо!

1 ответ

У wxPython на самом деле нет никакого механизма для определения, открыт ли MessageDialog. Вместо этого вы можете вручную отслеживать, открыто ли диалоговое окно.

Если вы откроете MessageDialog с помощью ShowModalтогда ShowModal вызов вернется, когда диалог будет закрыт. Вы можете использовать флаг, который установлен в True до звонка ShowModal а также False потом, то есть что-то вроде:

self.is_dialog_open = True
dialog.ShowModal()
self.is_dialog_open = False

Метод, вызываемый вашим wx.Timer, может затем использовать self.is_dialog_open определить, открыт ли диалог.

В зависимости от структуры вашего приложения, вы можете сохранить этот флаг в каком-то другом объекте вместо self,

(Я не даю никаких гарантий, что этот код не подвержен условиям гонки. Если ваш таймер проверяет, открыто ли диалоговое окно сразу после ShowModal() возвращается, но до self.is_dialog_open установлен обратно False, тогда ваш таймер будет думать, что диалог открыт, когда он на самом деле был только что закрыт. Надеюсь, это не будет серьезной проблемой для вас.)

Другие вопросы по тегам