import numpy as np from PyQt5 import QtGui, QtWidgets, QtCore from pyqtgraph.Qt import QtCore, QtGui import pyqtgraph as pg from pyqtgraph import PlotWidget class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") # MainWindow.resize(1002, 677) MainWindow.resize(720, 500) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setGeometry(QtCore.QRect(10, 10, 701, 391)) self.tabWidget.setObjectName("tabWidget") self.Feed = QtWidgets.QWidget() self.Feed.setObjectName("Feed") # self.graphWidget = PlotWidget(self.Feed) self.graphWidget = MyPlot(self.Feed) self.graphWidget.setGeometry(QtCore.QRect(10, 60, 671, 291)) self.graphWidget.setObjectName("graphWidget") self.widget = QtWidgets.QWidget(self.Feed) self.widget.setGeometry(QtCore.QRect(10, 10, 671, 41)) self.widget.setObjectName("widget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.label = QtWidgets.QLabel(self.widget) font = QtGui.QFont() font.setPointSize(9) self.label.setFont(font) self.label.setFrameShape(QtWidgets.QFrame.Box) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.label_2 = QtWidgets.QLabel(self.widget) font = QtGui.QFont() font.setPointSize(9) self.label_2.setFont(font) self.label_2.setFrameShape(QtWidgets.QFrame.Box) self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setObjectName("label_2") self.horizontalLayout.addWidget(self.label_2) self.label_3 = QtWidgets.QLabel(self.widget) font = QtGui.QFont() font.setPointSize(9) self.label_3.setFont(font) self.label_3.setFrameShape(QtWidgets.QFrame.Box) self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName("label_3") self.horizontalLayout.addWidget(self.label_3) self.label_4 = QtWidgets.QLabel(self.widget) font = QtGui.QFont() font.setPointSize(9) self.label_4.setFont(font) self.label_4.setFrameShape(QtWidgets.QFrame.Box) self.label_4.setAlignment(QtCore.Qt.AlignCenter) self.label_4.setObjectName("label_4") self.horizontalLayout.addWidget(self.label_4) self.label_5 = QtWidgets.QLabel(self.widget) font = QtGui.QFont() font.setPointSize(9) self.label_5.setFont(font) self.label_5.setFrameShape(QtWidgets.QFrame.Box) self.label_5.setAlignment(QtCore.Qt.AlignCenter) self.label_5.setObjectName("label_5") self.horizontalLayout.addWidget(self.label_5) self.tabWidget.addTab(self.Feed, "") self.Water = QtWidgets.QWidget() self.Water.setObjectName("Water") # self.graphWidget_2 = PlotWidget(self.Water) self.graphWidget_2 = MyPlot(self.Water) self.graphWidget_2.setGeometry(QtCore.QRect(10, 60, 671, 291)) self.graphWidget_2.setObjectName("graphWidget_2") self.layoutWidget = QtWidgets.QWidget(self.Water) self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 671, 41)) self.layoutWidget.setObjectName("layoutWidget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_6 = QtWidgets.QLabel(self.layoutWidget) font = QtGui.QFont() font.setPointSize(9) self.label_6.setFont(font) self.label_6.setFrameShape(QtWidgets.QFrame.Box) self.label_6.setAlignment(QtCore.Qt.AlignCenter) self.label_6.setObjectName("label_6") self.horizontalLayout_2.addWidget(self.label_6) self.label_7 = QtWidgets.QLabel(self.layoutWidget) font = QtGui.QFont() font.setPointSize(9) self.label_7.setFont(font) self.label_7.setFrameShape(QtWidgets.QFrame.Box) self.label_7.setAlignment(QtCore.Qt.AlignCenter) self.label_7.setObjectName("label_7") self.horizontalLayout_2.addWidget(self.label_7) self.label_8 = QtWidgets.QLabel(self.layoutWidget) font = QtGui.QFont() font.setPointSize(9) self.label_8.setFont(font) self.label_8.setFrameShape(QtWidgets.QFrame.Box) self.label_8.setAlignment(QtCore.Qt.AlignCenter) self.label_8.setObjectName("label_8") self.horizontalLayout_2.addWidget(self.label_8) self.label_9 = QtWidgets.QLabel(self.layoutWidget) font = QtGui.QFont() font.setPointSize(9) self.label_9.setFont(font) self.label_9.setFrameShape(QtWidgets.QFrame.Box) self.label_9.setAlignment(QtCore.Qt.AlignCenter) self.label_9.setObjectName("label_9") self.horizontalLayout_2.addWidget(self.label_9) self.label_10 = QtWidgets.QLabel(self.layoutWidget) font = QtGui.QFont() font.setPointSize(9) self.label_10.setFont(font) self.label_10.setFrameShape(QtWidgets.QFrame.Box) self.label_10.setAlignment(QtCore.Qt.AlignCenter) self.label_10.setObjectName("label_10") self.horizontalLayout_2.addWidget(self.label_10) self.tabWidget.addTab(self.Water, "") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label.setText(_translate("MainWindow", "TextLabel")) self.label_2.setText(_translate("MainWindow", "TextLabel")) self.label_3.setText(_translate("MainWindow", "TextLabel")) self.label_4.setText(_translate("MainWindow", "TextLabel")) self.label_5.setText(_translate("MainWindow", "TextLabel")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.Feed), _translate("MainWindow", "Feed")) self.label_6.setText(_translate("MainWindow", "TextLabel")) self.label_7.setText(_translate("MainWindow", "TextLabel")) self.label_8.setText(_translate("MainWindow", "TextLabel")) self.label_9.setText(_translate("MainWindow", "TextLabel")) self.label_10.setText(_translate("MainWindow", "TextLabel")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.Water), _translate("MainWindow", "Water")) class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setupUi(self) x = np.arange(5) y1 = x self.barFeed = MyBarGraphItem() self.barFeed.setAttr(x=x, y=y1-0.5*x, height=y1, width=0.8) self.barWater = MyBarGraphItem() self.barWater.setAttr(x=x, y=y1-0.5*x, height=y1, width=0.8) self.graphWidget.addBars(self.barFeed) self.graphWidget_2.addBars(self.barWater) class MyPlot(PlotWidget): def __init__(self, parent=None): super().__init__(parent) self.bars = None def mousePressEvent(self, ev): pos = self.getPlotItem().vb.mapSceneToView(ev.pos()) if self.bars is not None: x, y = pos.x(), pos.y() for i,_ in enumerate(self.bars.x): if self.bars.x[i]-self.bars.width/2 < x < self.bars.x[i]+self.bars.width/2\ and 0 < y < self.bars.height[i]: print('\nclicked on bar '+str(i)) print('clicked on bar '+str(x)+' ; '+str(y)) self.window().label.setText(f'bar={i}') self.window().label_2.setText(f'x={x:.5f}') self.window().label_3.setText(f'y={y:.5f}') ev.accept() super().mousePressEvent(ev) def addBars(self, bars): self.bars = bars self.addItem(self.bars) class MyBarGraphItem(pg.BarGraphItem): def __init__(self): super().__init__() def setAttr(self, **opts): print(opts) if 'x' in opts: self.x = opts['x'] if 'height' in opts: self.height = opts['height'] if 'width' in opts: self.width = opts['width'] if 'y' in opts: self.y = opts['y'] super().setOpts(**opts) def main(): app = QtWidgets.QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_()) if __name__ == '__main__': main()