PyQt 代码在类内不起作用



最近我创建了一个简单的基于PyQt的应用程序。它所要做的就是制作一个系统托盘图标。问题是我可以看到应用程序正在运行,但是没有托盘图标。当我将托盘图标代码移到类之外时,它的工作很好。那么为什么这个类在这里是一个问题呢?

我的代码:

# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication(sys.argv)
class myApp(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.createTrayIcon()
    def createTrayIcon(self):
        self.trayIconMenu = QtGui.QMenu()
        self.trayIconMenu.addAction("Close", lambda : exit(1))
        self.trayIcon = QtGui.QSystemTrayIcon()
        self.trayIcon.setIcon(QtGui.QIcon(r"icon.png"))
        self.trayIcon.setToolTip("Tooltip")
        self.trayIcon.setContextMenu(self.trayIconMenu)
        self.trayIcon.show()
        self.trayIcon.showMessage("Title", u"Content")
myApp()
sys.exit(app.exec_())

由于没有将myApp()调用中创建的对象存储在变量中,因此Python在某些时候会对其进行垃圾收集。因此,您的托盘图标可能会在很短的时间内可见,但在某个时刻将被清理并消失(这就是您所看到的)。

只要你做myapp = myApp(),你就会没事的。

您是否忘记了main中的这一行?

.
.
.
objectMyApp = myApp()
objectMyApp.show() # Or don't show please comment this in.
sys.exit(app.exec_())

问题是您创建了对象,但没有放入变量。

最新更新