PyQt 对话框中的 matplotlib 十字光标不显示
matplotlib crosshair cursor in PyQt dialog does not show up
我想在 matplotlib
window 中的光标处设置一个十字准线。这在 matplotlib gallery 中给出的示例中有效。但不幸的是,如果我在 Qt 对话框中有 matplotlib 小部件,它就不起作用 window (QDialog
).
这是我的代码示例,我想在其中实例化 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_())
有人可以帮忙吗?
我已经按如下方式修改了您的代码,它可以在我的电脑上运行。希望对你有帮助。
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_())
(1) 中的原始代码:Cursor(self.ax, useblit=False, color='red', linewidth=1)
没有按照文档中的指示留下对 Cursor 的引用。
(2) 中的代码有赋值,但不是对 class 引用而是对局部变量的赋值:
cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)
(2) 中的代码可以使用指定的添加项,但光标移动缓慢。
解决方法如(1)中的代码修改如下:
self.cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)
我想在 matplotlib
window 中的光标处设置一个十字准线。这在 matplotlib gallery 中给出的示例中有效。但不幸的是,如果我在 Qt 对话框中有 matplotlib 小部件,它就不起作用 window (QDialog
).
这是我的代码示例,我想在其中实例化 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_())
有人可以帮忙吗?
我已经按如下方式修改了您的代码,它可以在我的电脑上运行。希望对你有帮助。
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_())
(1) 中的原始代码:Cursor(self.ax, useblit=False, color='red', linewidth=1)
没有按照文档中的指示留下对 Cursor 的引用。
(2) 中的代码有赋值,但不是对 class 引用而是对局部变量的赋值:
cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)
(2) 中的代码可以使用指定的添加项,但光标移动缓慢。
解决方法如(1)中的代码修改如下:
self.cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)