这是简单系统托盘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)?
答案 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()