2

这是简单系统托盘 PyQt 应用程序的代码示例。

import sys
from PyQt4 import QtGui

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

   trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon('test.png'), app)
   menu = QtGui.QMenu()
   exitAction = menu.addAction("Exit")
   trayIcon.setContextMenu(menu)

   # I'd like to show picture in tooltip, BUT IT'S NOT WORK IN WINDOWS
   trayIcon.setTooltip('<img src="SomePicture.png" width="48" height="48"/>')

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

if __name__ == '__main__':
   main()

在这段代码中,我想显示带有一些图片和某种文本格式的气球工具提示。为此,我使用 RichText 标记格式。结果是 Ubuntu Linux 系统(Gnome 桌面)一切正常。但是当我尝试在 Windows XP 系统中为工具提示使用 RichText 格式时,没有任何效果。工具提示文本等于源字符串:''。Windows 2.7 和 Linux 2.6 上的 Python 版本,但我认为这个问题不在不同版本中。

如果在 Windows 操作系统中 RichText 不解析,我该如何制作相同类型的 GUI(首选跨平台)?

4

2 回答 2

2

在 Windows 上 Qt 使用 os 的工具提示系统,它只支持文本。

如果你想要更高级的东西,你可以按照这里QSystemTrayIcon.showMessage()的描述使用。您可能必须安装一个事件过滤器或覆盖s方法来获取帮助事件。QTrayIconevent

于 2012-05-24T10:52:22.337 回答
2

如果有人也对创建气球小部件感兴趣。这是我的代码:

class SystemTrayIcon(QtGui.QSystemTrayIcon):
    def __init__(self, parent = None): 
        QtGui.QSystemTrayIcon.__init__(self, icon, parent)
        traySignal = "activated(QSystemTrayIcon::ActivationReason)"
        self.connect(self, QtCore.SIGNAL(traySignal), self._activateRoutine)
        self.balloon = balloonWidget(name)

    def _activateRoutine(self, reason):
        if reason == QtGui.QSystemTrayIcon.Trigger:
            self.balloon.show(self.geometry())

class balloonWidget(QtGui.QWidget):
    def __init__(self,name):
        QtGui.QWidget.__init__(self, parent = None, flags = QtCore.Qt.Popup)

        self.name = name

        self.offsetX = 10
        self.offsetY = 10

        self.outInfo = QtGui.QLabel(self)

        self.setStyleSheet("QWidget {border:5px solid rgb(170, 170, 255);}")

    def show(self,coord):
        richText = tr('Any text with Rich Format')
        self.outInfo.setText(richText)
        self.outInfo.show()
        self.adjustSize()

        origin = QtGui.QDesktopWidget().availableGeometry().bottomRight()

        if coord.y() < origin.y()/2:
            moveY = coord.bottomLeft().y() + self.offsetY
        else:
            moveY = coord.topLeft().y() - (self.height() + self.offsetY)

        if coord.x() + self.width() + self.offsetX >= origin.x():
            moveX = origin.x() - (self.width() + self.offsetX)
        else:
            moveX = coord.x()

        self.move(moveX,moveY)
        self.setVisible(True)

    def closeEvent(self, event):
        event.ignore()
        self.hide()

    def mousePressEvent(self, event):
        self.close()
于 2012-05-28T11:57:07.480 回答