2016-04-01 20 views
1

matplotlib penceremdeki imleçte bir artı işareti olmasını istiyorum. Bu, matplotlib gallery'da verilen örnekte çalışır. Ama ne yazık ki, bir Qt iletişim penceresinde (QDialog) matplotlib widget'ım varsa işe yaramaz.PyQt iletişim kutusunda matplotlib crosshair imleci görünmüyor

Bu, matplotlib.widgets.Cursor nesnesini başlatmak istediğim kod örneğim ancak hiçbir şey görünmüyor.

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_()) 

Birisi yardımcı olabilir mi?

cevap

2

Kodunuzu aşağıdaki gibi değiştirdim ve bilgisayarım üzerinde çalışıyor. Umarım yardımcı olur.

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_())