PyQt RichText在系统托盘工具提示中格式化

时间:2012-05-24 09:14:48

标签: python user-interface pyqt tooltip richtext

这是简单系统托盘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上的Python版本,在Linux 2.6上,但我认为问题不是在不同版本中。

如果在Windows操作系统中RichText没有解析我如何制作相同类型的GUI(首选Crossplatform)?

2 个答案:

答案 0 :(得分:1)

在Windows上,Qt使用os'工具提示系统,该系统仅支持文本。

如果您想要更高级的内容,可以QSystemTrayIcon.showMessage()使用here所述的内容。您可能必须安装eventfilter或覆盖QTrayIcon s event方法才能获得帮助事件。

答案 1 :(得分:1)

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

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()