如何在 PyQt5 中添加工具提示来绘制元素?

问题描述 投票:0回答:1

我有一个继承自

Qlabel
的自定义小部件,它有一个
painEvent
成员,可以绘制一堆点,我需要为每个点设置不同的工具提示。

这是我所拥有的一个简化的独立示例:

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import Qt, QPoint
from PyQt5.QtWidgets import QLabel, QSizePolicy
from PyQt5.QtGui import QPixmap, QPainter, QPen

class MyWidget(QLabel):
   def __init__(self):
      super().__init__()
      self._pixmap = QPixmap()
      canvas = QPixmap(1020, 100)
      canvas.fill(Qt.white)
      self.setPixmap(canvas)
      self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
      self.point_data = []

   def paintEvent(self, event):
      painter = QPainter(self)
      pen = QPen(Qt.black, 3)
      painter.setPen(pen)
      painter.drawLine(10, 50, 1000, 50)
      pen.setWidth(15)
      painter.setPen(pen)
      for p in self.point_data:
         point = QPoint(p['pos'], 50)
         point.setTooltip(p['info_str'])
         painter.drawPoint(point)
      painter.end()

app = QApplication([])

window = MyWidget()
window.point_data = [
   {'pos': 50,  'info_str': 'hello'},
   {'pos': 200, 'info_str': 'goodbye'}
]
window.show()

app.exec()

这不会绘制任何点并打印错误

'QPoint' object has no attribute 'setTooltip'
。如果我删除
point.setTooltip(p['info_str'])
行,它就可以工作。

那么如何添加工具提示?

python pyqt5 qpainter
1个回答
0
投票

QPoint 是一个存储位置但不与任何图形元素关联的对象。如果你想使用多个工具提示,那么你必须检测你想要的位置是否被单击并显示 QToolTip。比如:

def mousePressEvent(self, event):
    pos = event.pos()
    for p in self.point_data:
        if p['pos'] == pos:
            QToolTip.showText(pos, p['info_str'], self)
            return
© www.soinside.com 2019 - 2024. All rights reserved.