2016-04-01 17 views
1

私のmatplotlibウィンドウのカーソルに十字カーソルがあります。この例では、matplotlib galleryで与えられています。しかし、残念ながら、Qtダイアログウィンドウ(QDialog)にmatplotlibウィジェットがあると、うまくいきません。PyQtダイアログ内の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_()) 

誰かが助けることができますか?

答えて

2

私はあなたのコードを以下のように変更しました。これは自分のコンピュータで動作します。それが役に立てば幸い。

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_()) 
関連する問題