【问题标题】:Open QDialog from system tray application menu从系统托盘应用程序菜单打开 QDialog
【发布时间】:2015-10-06 03:33:11
【问题描述】:

我正在尝试从系统托盘菜单 (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)

如何打开对话框?我不希望它没有父母。

【问题讨论】:

  • 你为什么不希望它没有父母?你到底想达到什么目的?
  • @ekhumoro:我想我做错了什么。当我尝试在没有父母的情况下使用它时,我可以关闭托盘应用程序并且打开的对话框保持打开状态。
  • 好的。该对话框可以有一个QObject 作为父级,因此请尝试使用dialog.setParent(systrayicon)
  • @ekhumoro:不。你的建议是做同样事情的另一种方式。我收到类似的错误消息。我想我已经找到了解决方案。其实很简单。我没有看到明显的。感谢您的帮助。
  • 嗯,是的,这有点脑残。我想我应该猜到 setParent 是为小部件重新实现的。

标签: python pyqt pyqt4 pyside


【解决方案1】:

解决方案实际上非常简单。即使是系统托盘应用程序也需要 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多