当它在类中时,PyQt代码不起作用

时间:2014-08-12 04:15:10

标签: python class 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_())

2 个答案:

答案 0 :(得分:1)

你在主处忘记了这一行吗?

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

问题是你的创建对象,但没有放入变量。如果你放入变量,那就更好了。

答案 1 :(得分:1)

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

只要你改为myapp = myApp(),你就可以了。