Pyqt对话框中的matplotlib十字光标没有显示?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (461)

我想在matplotlib窗口的光标处有一个十字准线。这在matplotlib库中给出的示例中有效(http://matplotlib.org/examples/widgets/cursor.html)。但如果我在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_())

有人能帮忙吗?

提问于
用户回答回答于

我已经修改了你的代码如下,它在我的计算机上工作。希望能帮上忙。

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)不会在文档中指出光标的引用。

(2)中的代码具有赋值,但不是类引用,而是局部变量:

cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)

(2)中的代码与指示的添加一起使用,但光标移动缓慢。

解决方案是(1)中的代码,但修改如下:

self.cursor = Cursor(self.ax, useblit=False, color='red', linewidth=1)

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动