2015-09-14 4 views
17

Я внедряю приложение в вкладку в QApplication pyqt. Когда я закрываю вкладку, это приложение встроено в как я могу позволить ему отобразить диалог «Сохранить изменения»?Захват диалогового окна «Сохранить изменения» при использовании win32gui и закрытии встроенного приложения в QApplication?

Я использую это на tab_close:

win32gui.PostMessage(int(wdg.process._handle),win32con.WM_CLOSE,0,0) 

Когда я делаю это, хотя, я теряю это диалоговое окно, если приложение будет нормально бросить один.

Missing Prompt

Код выглядит примерно так:

class MainWindow(QTabWidget): 
    def __init__(self, parent=None): 
     QTabWidget.__init__(self, parent) 
     self.setTabsClosable(1) 
     self.tabCloseRequested.connect(self.close_tab) 

    ... 

    def close_tab(self,ind): 
     wdg = self.widget(ind) 
     win32gui.PostMessage(int(wdg.process._handle),win32con.WM_CLOSE,0,0) 
     self.removeTab(ind) 
     del wdg 

    ... 

Это создает пользовательский интерфейс, как это (с notepad.exe окна встроенной). Нажатие «X» на вкладке закроет «Блокнот», не запрашивая пользователя для сохранения ввода.

Embedded Notepad in a tab

Как я могу закрыть вкладку и разрешить встроенное приложение для запроса пользователя, чтобы сохранить свои изменения?

+0

Есть ли разница, если вы изменили 'WM_CLOSE' на' WM_QUIT'? –

+0

@StevenRumbalski, согласно [этому] (http://stackoverflow.com/questions/3155782/what-is-the-difference-between-wm-quit-wm-close-and-wm-destroy-in-a- windows-pr): Да. Но, в моем случае, обе едят «Сохранить?». Диалог – Andy

+1

есть способ, которым вы можете получить код возврата из приложения? я предполагаю, что вы отправляете сообщение закрытия (асинхронно), затем закрываете вкладку (которая является родительской для другого приложения и, следовательно, диалогом «save»), которая заставляет оба окна закрываться. Я не мог сказать точно, но сначала я бы посмотрел. –

ответ

1

Вы находитесь на пути, который принесет вам только боль и разочарования.

Блокнот - это лишь одно из немногих приложений Windows, имеющее исходный код, доступный бесплатно.
Скомпилируйте его и внесите изменения в соответствии с вашими потребностями.

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

Теперь, если вы действительно хотите продолжить автоматизацию для Windows, вам, вероятно, понадобится что-то вроде https://pywinauto.github.io, которое имеет пример для notepad.exe.

+0

Это может работать для Notepad, но как насчет других приложений? Это конечная цель здесь, и «Блокнот» представляет собой простой тестовый пример – Andy

 Смежные вопросы

  • Нет связанных вопросов^_^