我在 PyQt5 GUI 上有 9 个由 matplotlib 绘制的画布,可以在这里看到:
画布是动态生成的:
class Canvas(FigureCanvas):
def __init__(self, parent=None):
super().__init__(Figure(figsize=(5, 3)))
self.setParent(parent)
self.mpl_connect("button_press_event", self.on_press)
def on_press(self, event):
print(self, event)
canvas = Canvas()
ax = canvas.figure.subplots()
ax.plot(x, y_leak, '--rs', label='Y_leak')
ax.plot(x, y_lin, '-g*', label='Y_lin')
ax.plot(x, y_sat, ':bo', label='Y_sat')
ax.legend()
答案 0 :(得分:2)
Qt 实现的一个解决方案是使用一个标志来指示画布是否被按下,然后使用该信息绘制边框并覆盖paintEvent 方法。
class Canvas(FigureCanvas):
def __init__(self, parent=None):
super().__init__(Figure(figsize=(5, 3)))
self.setParent(parent)
self.mpl_connect("button_press_event", self.on_press)
self._draw_border = False
def on_press(self, event):
self._draw_border = True
self.update()
def paintEvent(self, event):
super().paintEvent(event)
if self._draw_border:
painter = QPainter(self)
pen_width = 5
painter.setPen(QPen(QColor("#00ff00"), 2 * pen_width))
painter.drawRect(self.rect())