импорт модуля перетаскиваемых строк в Matplotlib в PyQt5 - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь применить класс перетаскиваемой строки к файлу pyqt5 с несколькими подгруппами, он показывает требуемые строки, но не отвечает на события из класса перетаскиваемой линии, файл перетаскивания

import matplotlib.pyplot as plt
import matplotlib.lines as lines
from matplotlib.figure import Figure

class draggable_lines:
    def __init__(self, ax, kind, X1,X2,Y1, Y2):
        self.ax = ax
        self.canvas = ax.get_figure().canvas
        self.o = kind
        self.X1 = X1
        self.X2 = X2
        self.Y1 = Y1
        self.Y2 = Y2
        if kind == "h":
            x = [X1, X2]
            y = [Y1,Y2]
        elif kind == "v":
            x = [X1, X2]
            y = [Y1,Y1]
        self.line = lines.Line2D(x, y, picker=5)
        self.ax.add_line(self.line)
        self.canvas.draw_idle()
        self.sid = self.canvas.mpl_connect('pick_event', self.clickonline)
    def clickonline(self, event):
        if event.artist == self.line:
            self.follower = self.canvas.mpl_connect("motion_notify_event", self.followmouse)
            self.releaser = self.canvas.mpl_connect("button_press_event", self.releaseonclick)
    def followmouse(self, event):
        if self.o == "h":
            self.line.set_ydata([event.ydata, event.ydata])
        else:
            self.line.set_xdata([event.xdata, event.xdata])
        self.canvas.draw_idle()
    def releaseonclick(self, event):
        if self.o == "h":
            self.Y = self.line.get_ydata()[0]
        else:
            self.X = self.line.get_xdata()[0]
        self.canvas.mpl_disconnect(self.releaser)
        self.canvas.mpl_disconnect(self.follower)
#
#fig = plt.figure()
#ax = fig.add_subplot(111)
#m = [2,5,7]
#n = [1,3,6]
#lineaa = []
#ax.set_xlim(0,10)
#for i,j in zip(n,m):
#    line = draggable_lines(ax, "h", i, j, 0.5,0.5)
#    lineaa.append(line)
#plt.show()

и это пример код для PyQt mpl figure

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import matplotlib.lines as lines
from matplotlib.figure import Figure
from Drag import draggable_lines

class Window(QtWidgets.QDialog):
    def __init__(self,):
        super().__init__()
        self.figure = Figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)
        self.button1 = QtWidgets.QPushButton('Plot')
        self.button1.clicked.connect(self.plot)
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.toolbar)
        self.layout.addWidget(self.canvas)
        btnlayout = QHBoxLayout()
        btnlayout.addWidget(self.button1)
        qw = QWidget(self)
        qw.setLayout(btnlayout)
        self.layout.addWidget(qw)
        self.setLayout(self.layout)
    def plot(self):
        ax = self.figure.add_subplot(121)
        ax1 = self.figure.add_subplot(122)
        m = [2, 5, 7]
        n = [1, 3, 6]
        lineaa = []
        ax.set_xlim(0, 10)
        for i, j in zip(n, m):
            line = draggable_lines(ax, "h", i, j, 0.5, 0.5)
            lineaa.append(line)
        self.canvas.draw_idle()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = Window()
    #main.setWindowTitle('Simple ')
    main.show()
    sys.exit(app.exec_())

Я не уверен, что между холстом, соединяющимся с событием в файле класса перетаскивания, и другим в основном файле будет разница, любой совет будет оценен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...