当前位置: 首页 > 面试题库 >

PyQt:在系统任务栏应用程序中显示菜单

朱宏爽
2023-03-14
问题内容

首先,我是一位经验丰富的C程序员,但是刚接触python。我想使用pyqt在python中创建一个简单的应用程序。让我们想象一下这个应用程序,就像它在运行时一样简单,它必须在系统托盘中放置一个图标,并且在菜单中提供了退出该应用程序的选项。

这段代码有效,它显示了菜单(为了简化起见,我没有连接退出动作,依此类推)

import sys
from PyQt4 import QtGui

def main():
    app = QtGui.QApplication(sys.argv)

    trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon("Bomb.xpm"), app)
    menu = QtGui.QMenu()
    exitAction = menu.addAction("Exit")
    trayIcon.setContextMenu(menu)

    trayIcon.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

但这不是:

import sys
from PyQt4 import QtGui

class SystemTrayIcon(QtGui.QSystemTrayIcon):

    def __init__(self, icon, parent=None):
        QtGui.QSystemTrayIcon.__init__(self, icon, parent)
        menu = QtGui.QMenu()
        exitAction = menu.addAction("Exit")
        self.setContextMenu(menu)

def main():
    app = QtGui.QApplication(sys.argv)

    trayIcon = SystemTrayIcon(QtGui.QIcon("Bomb.xpm"), app)

    trayIcon.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我可能想念一些东西。没有错误,但是在第二种情况下,当我单击鼠标右键时,它不显示菜单。


问题答案:

好了,经过一些调试,我发现了问题。完成__init__功能后销毁的QMenu对象,因为它没有父对象。虽然QSystemTrayIcon的父级可以是QMenu的对象,但它必须是Qwidget。此代码有效(请参阅QMenu如何与作为QWidget的QSystemTrayIcon获得相同的父代):

import sys
from PyQt4 import QtGui

class SystemTrayIcon(QtGui.QSystemTrayIcon):

    def __init__(self, icon, parent=None):
        QtGui.QSystemTrayIcon.__init__(self, icon, parent)
        menu = QtGui.QMenu(parent)
        exitAction = menu.addAction("Exit")
        self.setContextMenu(menu)

def main():
    app = QtGui.QApplication(sys.argv)

    w = QtGui.QWidget()
    trayIcon = SystemTrayIcon(QtGui.QIcon("Bomb.xpm"), w)

    trayIcon.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()


 类似资料:
  • 我有一个MFC应用程序。在我的应用程序中,如果我在Windows XP上运行,它工作正常。但如果我在Windows Vista中运行,MFC对话框会隐藏在任务栏后面。 我使用了这个代码,但它隐藏了任务栏。但我想在任务栏上方显示应用程序。

  • 我的应用程序有一个选项,用户只能在系统托盘中运行,而不能在任务栏中运行。当我的应用程序由Delphi 6构建时,它运行良好。切换到Delphi XE2后,它不再工作。 我把它弄得一团糟,我让它适用于Windows 7,但是在Windows XP上运行时,我仍然有一个问题。应用程序正确地从任务栏中隐藏,并显示在系统托盘中。但是当我创建并显示任何附加表单时,图标会显示在Windows XP中。 如果用

  • 问题内容: 我正在寻找有关将某些Windows 7任务栏新功能集成到我的PyQt应用程序中的信息。 特别是,如果已经存在使用新进度指示器(请参见此处)和快速链接(www.petri.co.il/wp- content/uploads/new_win7_taskbar_features_8.gif)的可能性。 如果有人可以提供一些链接或只是“未实现”,我将不胜感激。 非常感谢。 问题答案: 正如夸克

  • 我有一个用LabVIEW创建的应用程序,我需要在运行时在Windows任务栏上显示/隐藏应用程序图标。我认为WINAPI可以用于此目的,我尝试使用ShowWindow函数(user32.dll) 显示窗口(hWnd,SW_HIDE)- 显示窗口(hWnd,SW_SHOWMINIMIZED)-

  • 问题内容: 我正在使用以下代码在任务栏上显示JDialog,并且在JDK 1.6中可以正常工作。 但是当我使用方法设置模态类型时,它不起作用 这两个代码之间有什么区别?有什么方法可以解决此问题吗? 问题答案: 问题是某些所有者的构造方法会创建一个伪框架所有者(如果所有者是出于历史原因)。但是 必须没有 所有者像顶级窗口一样可见。即 将工作。

  • 问题内容: 我正在尝试在Windows中显示。如何在Windows任务栏上显示(如)? 问题答案: 对话框本身不能具有任务栏条目,但是您可以构造一个没有任何可见效果的框架,并将其用作对话框的父级。然后,该对话框看起来像具有任务栏条目。以下代码显示了如何执行此操作: