最近我创建了一个简单的基于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_())
问题是您创建了对象,但没有放入变量。