从系统托盘应用程序菜单中打开QDialog

时间:2015-07-16 15:25:53

标签: python pyqt pyqt4 pyside

我试图从系统托盘菜单(QtGui.QMenu)中的选项打开QDialog。但我原来的班级' Mensageiro'是从QtGui.QSystemTrayIcon派生的,因此在创建QDialog实例时出现异常:

TypeError: 'PySide.QtGui.QDialog' called with wrong argument types:
   PySide.QtGui.QDialog(Mensageiro)
Supported signatures:
   PySide.QtGui.QDialog(PySide.QtGui.QWidget = None, PySide.QtCore.Qt.WindowFlags = 0)

我该怎么做才能打开对话框?我不希望它成为无父母。

1 个答案:

答案 0 :(得分:0)

解决方案实际上非常简单。即使系统托盘应用程序也需要QWidget作为其父级。父窗口小部件仍然隐藏。因此,我将QDialog创建为同一父窗口小部件的子项:

self.dialog = dialogos.DialogExemplo(self.parent)

当我使用“退出”选项关闭托盘应用程序时,将执行以下代码:

 self.application.setQuitOnLastWindowClosed(True)
 # Hide the tray icon before it is destroyed
 self.hide()
 # Close the parent widget, killing all open windows.
 self.parent.close()