Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用matplotlib';在PyQt文本字段中显示值;s对象拾取功能?_Python_Matplotlib_Pyqt_Qtgui - Fatal编程技术网

Python 如何使用matplotlib';在PyQt文本字段中显示值;s对象拾取功能?

Python 如何使用matplotlib';在PyQt文本字段中显示值;s对象拾取功能?,python,matplotlib,pyqt,qtgui,Python,Matplotlib,Pyqt,Qtgui,我使用PyQt 4作为基本GUI,使用matplotlib作为绘图,从中读取绘图数据点的坐标。基于(简单拾取示例),我有一个简单的问题,即无法在文本字段(如QtGui.QLabel())中显示数据点的坐标。我不明白为什么我不能在方法onpick()中调用实例Window.msg。可能是因为它没有将实例提供给该方法。我只对面向对象编程有一个基本的了解(但我正在研究它),所以问题是我缺乏知识 我的问题:如何在我的GUI中基于PyQT(在我的标签lbl)的matplotlib绘图中显示所选数据的坐标(

我使用PyQt 4作为基本GUI,使用matplotlib作为绘图,从中读取绘图数据点的坐标。基于(简单拾取示例),我有一个简单的问题,即无法在文本字段(如QtGui.QLabel())中显示数据点的坐标。我不明白为什么我不能在方法
onpick()
中调用实例
Window.msg
。可能是因为它没有将实例提供给该方法。我只对面向对象编程有一个基本的了解(但我正在研究它),所以问题是我缺乏知识

我的问题:如何在我的GUI中基于PyQT(在我的标签
lbl
)的matplotlib绘图中显示所选数据的坐标(通过单击它)

另外,在绘图中突出显示选定的数据点也很好

这是我的代码(工作代码):


选择器正在重叠自我(不确定原因)。在任何情况下,这都应该起作用:

import numpy as np
import matplotlib.pyplot as plt
from PyQt4 import QtGui
import sys
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
import matplotlib.pyplot as plt

class Window(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.initUI()

    def initUI(self):  
       self.msg = '0'

       # a figure instance to plot on
       self.figure = plt.figure()
       self.canvas = FigureCanvas(self.figure)
       self.toolbar = NavigationToolbar(self.canvas, self)

       # a label
       self.lbl = QtGui.QLabel(self.msg)

       # set the layout
       layout = QtGui.QVBoxLayout()
       layout.addWidget(self.toolbar)
       layout.addWidget(self.canvas)
       layout.addWidget(self.lbl)
       self.setLayout(layout)

       self.plot()

    def changelabel(arg):
        main.lbl.setText(str(arg[0])+' '+str(arg[1]))

    def plot(self):
        # random data
        data = [np.random.random() for i in range(10)]
        # create an axis
        ax = self.figure.add_subplot(111)
        # discards the old graph
        ax.hold(False)
        # plot data
        line, = ax.plot(data, 'o', picker=5)  # 5 points tolerance
        self.canvas.draw()
        self.canvas.mpl_connect('pick_event',  Window.onpick)

    def onpick(self):
        thisline = self.artist
        xdata = thisline.get_xdata()
        ydata = thisline.get_ydata()
        ind = self.ind

        # show data
        self.msg = (xdata[ind], ydata[ind])
        print(self.msg)
#        Window.changelabel(self.msg)
        main.lbl.setText(str(self.msg[0])+' '+str(self.msg[1]))


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main = Window()
    main.show()
    sys.exit(app.exec_())
,更改在
setText
函数中,因为我直接从变量调用它(no
self
窗口


选择器正在重叠自我(不确定原因)。在任何情况下,这都应该起作用:

import numpy as np
import matplotlib.pyplot as plt
from PyQt4 import QtGui
import sys
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
import matplotlib.pyplot as plt

class Window(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.initUI()

    def initUI(self):  
       self.msg = '0'

       # a figure instance to plot on
       self.figure = plt.figure()
       self.canvas = FigureCanvas(self.figure)
       self.toolbar = NavigationToolbar(self.canvas, self)

       # a label
       self.lbl = QtGui.QLabel(self.msg)

       # set the layout
       layout = QtGui.QVBoxLayout()
       layout.addWidget(self.toolbar)
       layout.addWidget(self.canvas)
       layout.addWidget(self.lbl)
       self.setLayout(layout)

       self.plot()

    def changelabel(arg):
        main.lbl.setText(str(arg[0])+' '+str(arg[1]))

    def plot(self):
        # random data
        data = [np.random.random() for i in range(10)]
        # create an axis
        ax = self.figure.add_subplot(111)
        # discards the old graph
        ax.hold(False)
        # plot data
        line, = ax.plot(data, 'o', picker=5)  # 5 points tolerance
        self.canvas.draw()
        self.canvas.mpl_connect('pick_event',  Window.onpick)

    def onpick(self):
        thisline = self.artist
        xdata = thisline.get_xdata()
        ydata = thisline.get_ydata()
        ind = self.ind

        # show data
        self.msg = (xdata[ind], ydata[ind])
        print(self.msg)
#        Window.changelabel(self.msg)
        main.lbl.setText(str(self.msg[0])+' '+str(self.msg[1]))


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main = Window()
    main.show()
    sys.exit(app.exec_())
,更改在
setText
函数中,因为我直接从变量调用它(no
self
窗口

main.lbl.setText(str(self.msg[0])+' '+str(self.msg[1]))