Я пытаюсь применить класс перетаскиваемой строки к файлу 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_())
Я не уверен, что между холстом, соединяющимся с событием в файле класса перетаскивания, и другим в основном файле будет разница, любой совет будет оценен