когда моя панель инструментов масштабирования активна, мой курсор перекрестия не работает. Как я могу скрыть свой существующий курсор перекрестия. Если я не могу скрыть предыдущий курсор перекрестия.я хочу включить мой перекрестный курсор.
мой файл main.py
import sys
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
from matplotlib.widgets import MultiCursor
from PyQt5.QtWidgets import QMainWindow,QVBoxLayout
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtCore, QtGui, QtWidgets
from multicursor_c import *
from Toolbar import MyToolbar
import datetime
from matplotlib.dates import num2date, date2num
from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator,DayLocator, SUNDAY
from mpl_finance import candlestick_ochl as candlestick
import numpy as np
class MainWindow_code_serarch(object):
def setup_code_serarch(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(870, 680)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayoutWidget1 = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget1.setGeometry(QtCore.QRect(17, 30, 341, 153))
self.verticalLayoutWidget1.setObjectName("verticalLayoutWidget")
self.verticalLayout1 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget1)
self.verticalLayout1.setContentsMargins(0, 0, 0, 0)
self.verticalLayout1.setObjectName("verticalLayout1")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(17, 150, 741, 553))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.figure = Figure(figsize=None, dpi=80, facecolor='k')
self.canvas = FigureCanvas(self.figure)
self.navigation_toolbar = MyToolbar(self.canvas, self)
self.navigation_toolbar.coordinates = False
self.verticalLayout.addWidget(self.canvas)
self.verticalLayout1.addWidget(self.navigation_toolbar)
axes, axes2 = self.figure.subplots(nrows=2, sharex=True)
dates = ['2018/10/30', '2018/11/03', '2018/11/04', '2018/11/05', '2018/11/07', '2018/11/10', '2018/11/11']
x = date2num([datetime.datetime.strptime(d, '%Y/%m/%d').date() for d in dates])
print(x)
# date_list = np.array(dates.index.to_pydatetime())
open = [8824, 8726.31, 8642.14, 8531.51, 8630.25, 8602.50, 8640.22]
high = [8858, 8748.60, 8551.36, 8653.16, 8476.69, 8630, 8570.56]
low = [8688, 8743.67, 8550.76, 8449.50, 8631.83, 8602.18, 8743.22]
close = [8820, 8747.17, 8550.52, 8553., 8517.10, 8628.78, 8588.52]
volume = [17759.56, 120000.17, 18739.52, 38599.50, 16517.10, 17723.78, 15588.52]
candle_trace = zip(*[x, open, high, low, close, volume])
lines, patches = candlestick(axes, candle_trace, width=.7,colorup='g', colordown='r',alpha=.9)
for line, patch in zip(lines, patches):
patch.set_edgecolor("y")
patch.set_linewidth(0.72)
patch.set_antialiased(False)
line.set_color("w")
line.set_zorder(0)
axes2.plot(x,[1, 2, 3, 4,7,8,9])
# mondays = WeekdayLocator(SUNDAY)
# alldays = DayLocator()
weekFormatter = DateFormatter('%b %d')
dayFormatter = DateFormatter('%d')
# axes.xaxis.set_major_locator(mondays)
# axes2.xaxis.set_major_locator(mondays)
# axes2.xaxis.set_minor_locator(alldays)
# axes.xaxis.set_minor_locator(alldays)
# axes.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
axes.set_position([0.02, 0.37, 0.88, 0.6])
axes2.set_position([0.02, 0.15, 0.88, 0.22])
axes.tick_params(axis='both', color='#ffffff', labelcolor='#ffffff')
axes.yaxis.tick_right()
axes2.tick_params(axis='both', color='#ffffff', labelcolor='#ffffff')
axes2.grid(color='lightgray', linewidth=.5, linestyle=':')
axes.grid(color='lightgray', linewidth=.5, linestyle=':')
axes2.yaxis.tick_right()
axes.autoscale_view()
axes2.autoscale_view()
axes2.xaxis_date()
axes.xaxis_date()
axes.margins(0, .5)
axes2.margins(0, .5)
axes.set_facecolor('#041105')
axes2.set_facecolor('#041105')
self.multi = FigureCursor(self.figure, horizOn=True, vertOn=True, color='r', lw=1)
self.canvas.draw()
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 246, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
# self.pushButton.clicked.connect(self.graphShowCode)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
# self.pushButton.setText(_translate("MainWindow", "OK"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = MainWindow_code_serarch()
ui.setup_code_serarch(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Это мой файл main.py, у меня есть импорт моего multicursor_cФайл .py и файл Toolbar.py.Я реализовал курсор в виде файла multicursor_c.py.В Toolbar.py я унаследовал класс NavigationToolbar matplotlib
файл multicursor_c.py
from matplotlib.widgets import MultiCursor
from matplotlib.widgets import *
from matplotlib.figure import Figure
class FigureCursor(Widget):
def __init__(self, fig, horizOn=True, vertOn=True, useblit=True, **lineprops):
self._cidmotion = None
self._ciddraw = None
self.background = None
self.needclear = False
self.visible = True
self.canvas = fig.canvas
self.fig = fig
self.horizOn = horizOn
self.vertOn = vertOn
self.useblit = useblit
lineprops = dict(color='w', linestyle='--',linewidth=1, alpha=0.5)
self.vline, = fig.axes[0].plot([1, 1], [0., 1.], visible=vertOn, transform=self.fig.transFigure,
clip_on = False, **lineprops)
self.hline, = fig.axes[0].plot([0., 1.], [-1., 0.], visible=horizOn, transform=self.fig.transFigure,
clip_on=False, **lineprops)
self.connect()
def connect(self):
"""connect events"""
self._cidmotion = self.canvas.mpl_connect('motion_notify_event', self.onmove)
self._ciddraw = self.canvas.mpl_connect('draw_event', self.clear)
def disconnect(self):
"""disconnect events"""
self.canvas.mpl_disconnect(self._cidmotion)
self.canvas.mpl_disconnect(self._ciddraw)
def clear(self, event):
"""clear the cursor"""
if self.ignore(event):
return
if self.useblit:
self.background = (
self.canvas.copy_from_bbox(self.canvas.figure.bbox))
for line in [self.vline, self.hline]:
line.set_visible(False)
def onmove(self, event):
if self.ignore(event):
return
if event.inaxes is None:
return
if not self.canvas.widgetlock.available(self):
return
self.needclear = True
if not self.visible:
return
trans = event.inaxes.transData + self.fig.transFigure.inverted()
x_fig, y_fig = trans.transform([event.xdata, event.ydata])
if self.vertOn:
self.vline.set_xdata([x_fig, x_fig])
self.vline.set_visible(self.visible)
if self.horizOn:
self.hline.set_ydata([y_fig, y_fig])
self.hline.set_visible(self.visible)
self._update()
def _update(self):
if self.useblit:
if self.background is not None:
self.canvas.restore_region(self.background)
if self.vertOn:
self.fig.draw_artist(self.vline)
if self.horizOn:
self.fig.draw_artist(self.hline)
self.canvas.blit(self.canvas.figure.bbox)
else:
self.canvas.draw_idle()
Мой файл Toolbar.py
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
class MyToolbar(NavigationToolbar):
def __init__(self, figure_canvas, parent= None):
self.toolitems = (
# ('Home', 'Lorem ipsum dolor sit amet', 'home', 'home'),
('Back', 'consectetuer adipiscing elit', 'back', 'back'),
('Forward', 'sed diam nonummy nibh euismod', 'forward', 'forward'),
(None, None, None, None),
('Pan', 'tincidunt ut laoreet', 'move', 'pan'),
('Zoom', 'dolore magna aliquam', 'zoom_to_rect', 'zoom'),
(None, None, None, None),
('Subplots', 'putamus parum claram', 'subplots', 'configure_subplots'),
('Save', 'sollemnes in futurum', 'filesave', 'save_figure'),
# ('Port', 'Select', "select", 'select_tool'),
('Home', 'Lorem ipsum dolor sit amet', 'home', 'home'),
)
NavigationToolbar.__init__(self, figure_canvas, parent= None)
def select_tool(self):
print ("You clicked the selection tool")

версия Python 3.5 pyqt5 matplotlib