2012-01-30 7 views
1
trayiconContextMenu = QtGui.QMenu() 
trayiconContextMenu.addAction("Exit") 
trayicon.setContextMenu(trayiconContextMenu) 

В pyqt контекстное меню прикреплено к значку в системном трее.
В конкретном сценарии выход приложения вызывается внутренне, но в это время, если меню панели задач открывается вручную, приложение не будет завершено.Меню qsystemtray не скрывается, когда приложение остановлено

После нажатия клавиши Esc или нажатия мышью в каком-либо другом приложении (например, когда меню лотка скрыто, выход приложения будет вызываться с ошибками.

trayiconContextMenu.hide() 
/*does not work in my above case.*/ 
trayicon.hide() 
/*hides tray icon alone but not the tray menu*/ 

Также для того же сценария приход приложения работает должным образом, когда меню лотка не отображается.

Помощь будет оценена по достоинству.

+0

Какую функцию вы звоните, чтобы выйти из приложения? например 'sys.exit' закроет контекстное меню. – reclosedev

+0

QtGui.qApp.exit() –

+0

Невозможно воспроизвести на Win32. 'sys.exit' и' QtGui.qApp.exit() 'немедленно закрывает приложение, когда отображается контекстное меню. – reclosedev

ответ

0

QSystemTrayIcon не принимает права собственности на меню при его настройке, поэтому вам может потребоваться предпринять шаги, чтобы убедиться, что он удален правильно.

попробовать что-то вроде этого:

trayiconContextMenu = QtGui.QMenu() 
trayiconContextMenu.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
... 
trayiconContextMenu.close() 
QtGui.qApp.quit() 
+0

Спасибо, но меню лотка не скрывается, а также мое приложение не останавливается, хотя я вызываю QtGui.qApp.quit() непосредственно при необходимости, когда меню лотка выворачивается и прокручивается в меню лотка. –