PyQt窗口关闭关闭整个应用程序

问题描述:

我有一些奇怪的问题与PyQt5应用程序创建。关闭窗口会杀死整个应用程序,但我不需要它,因为我也有一个托盘图标。我在Debian上运行python3,但我认为它不重要。PyQt窗口关闭关闭整个应用程序

有一个C#的解决方案。 Close a windows form without exiting the entire application 创建另一个表单,但不显示它。 PyQt可以吗?

import sys 

import PyQt5.QtWidgets 

class SettingsMenu(PyQt5.QtWidgets.QDialog): 
    def __init__(self, parent): 
     super().__init__() 
     self.setWindowTitle("Settings") 
     self.resize(300, 200) 

class ContextMenu(PyQt5.QtWidgets.QMenu): 
    def __init__(self): 
     super().__init__() 
     self.settings_action = self.addAction('Settings') 
     self.settings_action.triggered.connect(self.display_settings_menu) 

    def display_settings_menu(self, event): 
     self.settings_menu = SettingsMenu() 
     self.settings_menu.show() 

class TrayIcon(PyQt5.QtWidgets.QSystemTrayIcon): 
    def __init__(self): 
     super().__init__() 
     self.setIcon(PyQt5.QtGui.QIcon('icon.xpm')) 
     self.setContextMenu(ContextMenu()) 

if __name__ == '__main__': 
    app = PyQt5.QtWidgets.QApplication(sys.argv) 
    tray_icon = TrayIcon() 
    tray_icon.show() 
    sys.exit(app.exec_()) 

app.setQuitOnLastWindowClosed(False) 

解决我的问题。看起来PyQt5只计算打开和显示的窗口,而TrayIcon并不算作其中之一。