【发布时间】:2020-02-19 22:40:06
【问题描述】:
我有 Qt 应用程序,我在其中使用 pyqtgraph lib 绘制图形,并使用来自 pyqtgraph 的停靠容器。所以我创建了几个停靠容器并在每个容器中放置一个图表。然后,在我的代码中,我需要识别用户正在使用的图表来更新应用程序中的其他一些员工(例如,在所有小部件的一些通用中显示“活动”图表的一些属性)。
我的想法是接收鼠标点击信号并识别点击它的图表以了解最后一个图表用户交互。但是 pyqtgraph PlotWidget、PlotItem 或 ViewBox 类不提供这样的信号,我不知道是否有办法自己实现它。此外,我没有找到一种方法来识别哪个码头容器处于活动状态。 我只看到 PlotWidget 的 sigMouseReleased 但即使这对我也不起作用(参见下面的代码)
这是我的最低代码:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import pyqtgraph as pg
from pyqtgraph.dockarea import *
# I use Qt Designer, below I just cut generated code to minimum
class Ui_StartForm(object):
def setupUi(self, StartForm):
StartForm.setObjectName("StartForm")
StartForm.resize(1507, 968)
self.GraphLayout = QtWidgets.QGridLayout(StartForm)
# my application
class AppWindow(QtWidgets.QWidget, Ui_StartForm):
def __init__(self):
super(AppWindow, self).__init__()
self.setupUi(self)
self.dock_area_main = DockArea()
self.GraphLayout.addWidget(self.dock_area_main)
self.Dock1 = Dock("Dock 1", size=(1, 1))
self.dock_area_main.addDock(self.Dock1, 'left')
self.Dock2 = Dock("Dock 2", size=(1, 1))
self.dock_area_main.addDock(self.Dock2, 'right')
self.GraphViewList = []
self.pl1 = pg.PlotWidget()
self.pl2 = pg.PlotWidget()
self.Dock1.addWidget(self.pl1)
self.Dock2.addWidget(self.pl2)
self.pl1.sigMouseReleased.connect(self.mouse_release) # try to get some mouse event
def mouse_release(self):
print('click') # never execute
app = QtWidgets.QApplication(sys.argv)
w = AppWindow()
w.show()
sys.exit(app.exec_())
我的问题是如何为 pyqtgraph PlotItem 或 ViewBox 实现信号鼠标单击,以识别用户上次交互的图形。同时,它不应该影响pyqtgraph绘图的功能(它应该正常捕获所有鼠标事件)
如果有更好的策略 - 请提出建议
【问题讨论】: