我希望在matplotlib
窗口中的光标处有一个十字准线。这在matplotlib gallery中给出的示例中得到了解决。但不幸的是,如果我在Qt对话框窗口(QDialog
)中有matplotlib小部件,它就不能工作。
这是我的示例代码,我想在其中实例化matplotlib.widgets.Cursor
对象,但没有显示任何内容。
import sys
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor
class Window(QtGui.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.figure = plt.figure(facecolor='white')
self.canvas = FigureCanvas(self.figure)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.canvas)
self.setLayout(layout)
''' plot some random stuff '''
ax = self.figure.add_subplot(111)
self.ax = ax
ax.plot([1,2])
# Set cursor
Cursor(self.ax, useblit=False, color='red', linewidth=1)
self.canvas.draw()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())
有人能帮帮忙吗?
发布于 2016-07-26 14:30:00
我已经修改了你的代码如下,它在我的电脑上工作。希望能有所帮助。
import sys
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor
class Window(QtGui.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.figure = plt.figure(facecolor='white')
self.canvas = FigureCanvas(self.figure)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.canvas)
self.setLayout(layout)
''' plot some random stuff '''
ax = self.figure.add_subplot(111)
self.ax = ax
ax.plot([1,2])
# Set cursor
cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)
############## The added part: #############
def onclick(event):
cursor.onmove(event)
self.canvas.mpl_connect('button_press_event', onclick)
############################################
self.canvas.draw()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())
发布于 2018-07-30 02:50:19
(1):Cursor(self.ax, useblit=False, color='red', linewidth=1)
中的原始代码没有像文档中指出的那样保留对游标的引用。
(2)中的代码有赋值,但不是赋值给类引用,而是赋值给局部变量:
cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)
(2)中的代码可以处理指定的添加内容,但光标移动缓慢。
解决方案是(1)中的代码,但修改如下:
self.cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)
https://stackoverflow.com/questions/36350771
复制相似问题