2012-01-30 3 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()을 직접 호출해야합니다. –

관련 문제