在PyQt5中使用QPushButton创建和更新图

时间:2019-05-06 21:49:39

标签: python user-interface pyqt

我对PyQt5很陌生。我希望有一个按钮,单击该按钮即可生成并显示图。我似乎无法找到一种方法来使用QPushButton成功调用PlotCanvas函数。

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5 import QtWidgets, Qt
    from matplotlib.figure import Figure
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    import random
    import numpy as np
    import math

    class GUI_Window(QtWidgets.QWidget):

        def __init__(self):
            super().__init__()
            self.initUI()

        def initUI(self):
            self.plot_button = QtWidgets.QPushButton(self)
            self.plot_button.setText('Plot')
            self.plot_button.setToolTip('Plots the function')
            self.plot_button.move(50,240)

            self.plot_button.clicked.connect(self.updater)

       def updater(self):
           PlotCanvas(self, inputparam=5)
           print('Function has been called.')

即使我收到“函数已被调用”的打印输出,以上代码也不起作用(PlotCanvas未绘出)。

但是,如果我仅在PlotCanvas中调用initUI,它将按预期方式绘制。

    def initUI(self):
        self.plot_button = QtWidgets.QPushButton(self)
        self.plot_button.setText('Plot')
        self.plot_button.setToolTip('Plots the function')
        self.plot_button.move(50,240)

        self.plot_button.clicked.connect(self.updater)
        PlotCanvas(self, inputparam=5)

上面的代码按预期方式绘制了函数。

此外,如果我不带按钮(如下所示)简单地调用updater函数,就会显示该图。

    def initUI(self):
        self.plot_button = QtWidgets.QPushButton(self)
        self.plot_button.setText('Plot')
        self.plot_button.setToolTip('Plots the function')
        self.plot_button.move(50,240)

        #self.plot_button.clicked.connect(self.updater)
        self.updater()

   def updater(self):
       PlotCanvas(self, inputparam=5)
       print('Function has been called.')

我感觉我不知道“自我”是如何工作的,通过传递点击信号,我某种程度上搞砸了。任何帮助/见解将不胜感激。

    class PlotCanvas(FigureCanvas):

        def __init__(self, parent=None, width=1.5, height=2, dpi=100, inputparam=0):
            fig = Figure(figsize=(width, height), dpi=dpi)
            self.axes = fig.add_subplot(111)

            FigureCanvas.__init__(self, fig)
            self.setParent(parent)


            self.LLA_Plotter(inputparam)
# This function performs calculations and outputs x,y data points to plot



            ax = self.figure.add_subplot(111)
            for i in range(0,90):
                ax.scatter(x[i], y[i], color='b', s=0.6)
                ax.set_title('testing plot')
            plt.show()

0 个答案:

没有答案