Как сделать виджет Matplotlib в PyQt5 кликабельным? - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю на GUI, где у меня есть система вкладок с графиками. Я хочу, чтобы, если пользователь щелкает (или помещает курсор) в любую точку графика, он показывает точные значения x и y в этой точке следующим образом:

picture

Я знаю что в обычном matplotlib его легко реализовать; однако я не знаю, как это сделать в PyQt5.

Моя система вкладок и холст выглядят так:

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QApplication, QWidget,QVBoxLayout,QTabWidget
import sys
import matplotlib.pyplot as plt

def mouse_move(event):
    x, y = event.xdata, event.ydata
    print(x, y)


plt.connect('motion_notify_event', mouse_move)

class Canvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=5, dpi=80):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)
        self.plot()


    def plot(self):
            x = ['22-02 11:16:15', '22-02 15:31:54', '22-02 15:32:30',
                 '22-02 15:32:45', '22-02 15:33:57', '22-02 15:34:13',
             '22-02 15:34:46']
            y = [1, 4, 3, 4, 8, 9, 2]
            self.figure.tight_layout()
            ax = self.figure.add_subplot(111)
            ax.plot(x, y)


class MainWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.top = 255
        self.left = 150
        self.setGeometry(self.left, self.top, 900, 900)
        self.Mainlayout = QVBoxLayout(self)
        self.tabs = QTabWidget()
        self.graphUP = QWidget()
        self.graphUP.layout = QVBoxLayout( self.graphUP)
        self.graphUP.layout.addWidget(Canvas())
        self.tabs.setFixedHeight(800)
        self.tabs.setFixedWidth(800)
        self.tabs.addTab(self.graphUP, "Graph1")
        self.Mainlayout.addWidget(self.tabs)
        self.show()


if __name__ == '__main__':
    App = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(App.exec())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...