0

I wanted to know how the Matplotlib plotting works on PyQT5 desktop app. I tried several ways so that the graph would be plotted but no help. I have used a print function so that i can atleast know that the graph is plotted. It prints as plotted but the graph is not displayed. Need some help here. Below is my Code

'''
Created on Oct 8, 2018

@author: kjohn
'''
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog, QMessageBox, QMainWindow, QVBoxLayout
from PyQt5.QtGui import QIcon
import os
import csv
import matplotlib
from matplotlib import figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar


class MatplotlibFigure(QWidget):
    def __init__(self):
        super().__init__()
        self.figure = matplotlib.figure.Figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)

    def plot(self):
        self.figure.clf()
        ax = self.figure.add_subplot(111)
        x = [i for i in range(100)]
        y = [i**0.5 for i in x]
        ax.plot(x, y, 'g*-')
        self.canvas.draw_idle()
        print('PLOTTED')


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(1001, 651)
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        Form.setFont(font)
        Form.setMouseTracking(True)
        Form.setWindowTitle("Data Analytical Tool Kit")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(440, 70, 121, 25))
        self.pushButton.clicked.connect(self.inputfileselector)
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setMouseTracking(True)
        self.pushButton.setObjectName("pushButton")
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(670, 70, 241, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        self.comboBox.setFont(font)
        self.comboBox.setMouseTracking(True)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem('Site Classifier')
        self.comboBox.addItem('Account Classifier')
        self.comboBox.addItem('Meter Classifier')
        self.comboBox.addItem('EMS - Audit Engine')
        self.comboBox.addItem('Budget Forecaster')
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(20, 70, 411, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.lineEdit.setFont(font)
        self.lineEdit.setAutoFillBackground(True)
        self.lineEdit.setInputMethodHints(QtCore.Qt.ImhHiddenText)
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit.setReadOnly(True)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(21, 51, 91, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(671, 52, 108, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(669, 161, 121, 31))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.plot_data)
        self.pushButton_3 = QtWidgets.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(792, 161, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(Form)
        self.pushButton_4.setGeometry(QtCore.QRect(440, 117, 121, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_4.setFont(font)
        self.pushButton_4.setMouseTracking(True)
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.outputfolderselector)
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(20, 117, 411, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.lineEdit_2.setReadOnly(True)
        self.lineEdit_2.setFont(font)
        self.lineEdit_2.setAutoFillBackground(True)
        self.lineEdit_2.setInputMethodHints(QtCore.Qt.ImhHiddenText)
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(21, 97, 121, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.textEdit = QtWidgets.QTextEdit(Form)
        self.textEdit.setGeometry(QtCore.QRect(20, 210, 411, 421))
        self.textEdit.setObjectName("textEdit")
        self.progressBar = QtWidgets.QProgressBar(Form)
        self.progressBar.setGeometry(QtCore.QRect(670, 116, 275, 31))
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.pushButton_5 = QtWidgets.QPushButton(Form)
        self.pushButton_5.setGeometry(QtCore.QRect(440, 166, 121, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_5.setFont(font)
        self.pushButton_5.setMouseTracking(True)
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_5.clicked.connect(self.resultfolderselector)
        self.lineEdit_3 = QtWidgets.QLineEdit(Form)
        self.lineEdit_3.setGeometry(QtCore.QRect(20, 166, 411, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(7)
        font.setPointSize(10)
        self.lineEdit_3.setReadOnly(True)
        self.lineEdit_3.setFont(font)
        self.lineEdit_3.setAutoFillBackground(True)
        self.lineEdit_3.setInputMethodHints(QtCore.Qt.ImhHiddenText)
        self.lineEdit_3.setText("")
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(22, 146, 121, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

        self.figure = matplotlib.figure.Figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, Form)
        self.verticalLayoutWidget = QtWidgets.QWidget(Form)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(440, 210, 541, 421))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.verticalLayout.addWidget(self.canvas)
        self.verticalLayout.addWidget(self.toolbar)
        self.figure = MatplotlibFigure()

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "Browse File"))
        self.label.setText(_translate("Form", "Input File Upload"))
        self.label_2.setText(_translate("Form", "Select Classifier Type"))
        self.pushButton_2.setText(_translate("Form", "Submit"))
        self.pushButton_3.setText(_translate("Form", "Cancel"))
        self.pushButton_4.setText(_translate("Form", "Select Folder"))
        self.label_3.setText(_translate("Form", "Output Folder for Logs"))
        self.pushButton_5.setText(_translate("Form", "Select Folder"))
        self.label_4.setText(_translate("Form", "Result Folder"))
        Form.setWindowIcon(QtGui.QIcon('icon.png'))
        Form.setWindowTitle('Data Analysis Tool Kit')
        Form.setGeometry(180,50,1001,651)
        Form.setFixedSize(1001,651)
        Form.setWindowFlags( QtCore.Qt.CustomizeWindowHint | QtCore.Qt.MSWindowsFixedSizeDialogHint |QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint )


    def inputfileselector(self):
        path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
        filename = QtWidgets.QFileDialog.getOpenFileName(None, 'Select the Input File', path,'All Files(*.csv*)')
        if filename is filename:
            self.lineEdit.setText(str(filename))            
        else:
            self.lineEdit.setText("No file was selected.")
            QtWidgets.QMessageBox.critical(Form, "Alert", "No file was selected.", QtWidgets.QMessageBox.Close)

    def outputfolderselector(self):
        path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
        startingDir = path
        directory = QtWidgets.QFileDialog.getExistingDirectory(None, 'Open working directory', startingDir, QtWidgets.QFileDialog.ShowDirsOnly)
        if directory:
            self.lineEdit_2.setText(directory)
        else:
            self.lineEdit_2.setText('')
            QtWidgets.QMessageBox.critical(Form, "Alert", "No folder selected.", QtWidgets.QMessageBox.Close)

    def resultfolderselector(self):
        path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
        startingDir = path
        directory = QtWidgets.QFileDialog.getExistingDirectory(None, 'Open working directory', startingDir, QtWidgets.QFileDialog.ShowDirsOnly)
        if directory:
            self.lineEdit_3.setText(directory)
        else:
            self.lineEdit_3.setText('')
            QtWidgets.QMessageBox.critical(Form, "Alert", "No folder selected.", QtWidgets.QMessageBox.Close)

    def plot_data(self):
        self.figure.plot()
        self.canvas.setParent(self)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())
2
  • 2
    Can you create a minimal reproducible example? (I don't think it's relavant for the problem that you use "Segoe UI" as font and a single button should be enough, etc...) Commented Oct 11, 2018 at 15:04
  • (I don't think it's relevant for the problem that you use "Segoe UI" as font and a single button should be enough, etc...) "Segoe UI" was just the font i used. I have created the app layout using PyQt Designer and enhanced my code little bit so that i can do the plotting on the app using MatPlotLib which i am unable to. Commented Oct 11, 2018 at 16:39

1 Answer 1

1

First you have created a class MatplotlibFigure for matlabplot, at the same time you define matlab function in class Ui_Form, this is an error. to solve your problem,

We need to define two functions inside class MatplotlibFigure, the first func initializewidget() which defines canvas widget and figure frame for matlabplot with QGridLayout places and arranges them. Then the second func plot() draws the input data.

    def initializewidget(self):

        gridlayout = QGridLayout()
        self.setLayout(gridlayout)

        self.figure = plt.figure(figsize=(5,5))
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas,self)
        gridlayout.addWidget(self.canvas,1,0,1,2)
        gridlayout.addWidget(self.toolbar,0,0,1,2)

And finally Matlabplot widget should be added to main widget layout.

        self.matplot = MatplotlibFigure()
        self.verticalLayout.addWidget(self.matplot)

Matplotlib.pyplot is used for getting better graphs and even plots could customize with different styles.

        import matplotlib.pyplot as plt
        plt.style.use('ggplot')

The working current screen

enter image description here

The working code

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, 
QFileDialog, QMessageBox, QMainWindow, QVBoxLayout, QGridLayout
from PyQt5.QtGui import QIcon
import os
import csv
import matplotlib
from matplotlib import figure
import matplotlib.pyplot as plt
plt.style.use('ggplot')
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar


class MatplotlibFigure(QWidget):
    def __init__(self):
        super().__init__()        
        self.initializewidget()
        self.plot()


    def initializewidget(self):

        gridlayout = QGridLayout()
        self.setLayout(gridlayout)

        self.figure = plt.figure(figsize=(5,5))
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas,self)
        gridlayout.addWidget(self.canvas,1,0,1,2)
        gridlayout.addWidget(self.toolbar,0,0,1,2)

    def plot(self):
        ax = self.figure.add_subplot(111)
        x = [i for i in range(100)]
        y = [1*i for i in x]
        ax.plot(x, y, 'g*-')
        self.canvas.draw()



class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(1001, 651)
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        Form.setFont(font)
        Form.setMouseTracking(True)
        Form.setWindowTitle("Data Analytical Tool Kit")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(440, 70, 121, 25))
        self.pushButton.clicked.connect(self.inputfileselector)
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setMouseTracking(True)
        self.pushButton.setObjectName("pushButton")
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(670, 70, 241, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        self.comboBox.setFont(font)
        self.comboBox.setMouseTracking(True)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem('Site Classifier')
        self.comboBox.addItem('Account Classifier')
        self.comboBox.addItem('Meter Classifier')
        self.comboBox.addItem('EMS - Audit Engine')
        self.comboBox.addItem('Budget Forecaster')
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(20, 70, 411, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.lineEdit.setFont(font)
        self.lineEdit.setAutoFillBackground(True)
        self.lineEdit.setInputMethodHints(QtCore.Qt.ImhHiddenText)
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit.setReadOnly(True)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(21, 51, 91, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(671, 52, 108, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(669, 161, 121, 31))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.plot_data)
        self.pushButton_3 = QtWidgets.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(792, 161, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(Form)
        self.pushButton_4.setGeometry(QtCore.QRect(440, 117, 121, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_4.setFont(font)
        self.pushButton_4.setMouseTracking(True)
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.outputfolderselector)
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(20, 117, 411, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.lineEdit_2.setReadOnly(True)
        self.lineEdit_2.setFont(font)
        self.lineEdit_2.setAutoFillBackground(True)
        self.lineEdit_2.setInputMethodHints(QtCore.Qt.ImhHiddenText)
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(21, 97, 121, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.textEdit = QtWidgets.QTextEdit(Form)
        self.textEdit.setGeometry(QtCore.QRect(20, 210, 411, 421))
        self.textEdit.setObjectName("textEdit")
        self.progressBar = QtWidgets.QProgressBar(Form)
        self.progressBar.setGeometry(QtCore.QRect(670, 116, 275, 31))
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.pushButton_5 = QtWidgets.QPushButton(Form)
        self.pushButton_5.setGeometry(QtCore.QRect(440, 166, 121, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_5.setFont(font)
        self.pushButton_5.setMouseTracking(True)
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_5.clicked.connect(self.resultfolderselector)
        self.lineEdit_3 = QtWidgets.QLineEdit(Form)
        self.lineEdit_3.setGeometry(QtCore.QRect(20, 166, 411, 25))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(7)
        font.setPointSize(10)
        self.lineEdit_3.setReadOnly(True)
        self.lineEdit_3.setFont(font)
        self.lineEdit_3.setAutoFillBackground(True)
        self.lineEdit_3.setInputMethodHints(QtCore.Qt.ImhHiddenText)
        self.lineEdit_3.setText("")
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(22, 146, 121, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setBold(True)
        font.setWeight(75)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

        self.matplot = MatplotlibFigure()
        self.verticalLayoutWidget = QtWidgets.QWidget(Form)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(440, 210, 541, 421))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        # self.verticalLayout.addWidget(self.matplot)   # comment this line



    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "Browse File"))
        self.label.setText(_translate("Form", "Input File Upload"))
        self.label_2.setText(_translate("Form", "Select Classifier Type"))
        self.pushButton_2.setText(_translate("Form", "Submit"))
        self.pushButton_3.setText(_translate("Form", "Cancel"))
        self.pushButton_4.setText(_translate("Form", "Select Folder"))
        self.label_3.setText(_translate("Form", "Output Folder for Logs"))
        self.pushButton_5.setText(_translate("Form", "Select Folder"))
        self.label_4.setText(_translate("Form", "Result Folder"))
        Form.setWindowIcon(QtGui.QIcon('icon.png'))
        Form.setWindowTitle('Data Analysis Tool Kit')
        Form.setGeometry(180,50,1001,651)
        Form.setFixedSize(1001,651)
        Form.setWindowFlags( QtCore.Qt.CustomizeWindowHint | 
        QtCore.Qt.MSWindowsFixedSizeDialogHint |QtCore.Qt.WindowCloseButtonHint | 
                                              QtCore.Qt.WindowMinimizeButtonHint )


    def inputfileselector(self):
        path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
        filename = QtWidgets.QFileDialog.getOpenFileName(None, 'Select the Input 
                                                  File', path,'All Files(*.csv*)')
        if filename is filename:
            self.lineEdit.setText(str(filename))            
        else:
            self.lineEdit.setText("No file was selected.")
            QtWidgets.QMessageBox.critical(Form, "Alert", "No file was selected.", 
                                                      QtWidgets.QMessageBox.Close)

    def outputfolderselector(self):
        path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
        startingDir = path
        directory = QtWidgets.QFileDialog.getExistingDirectory(None, 'Open working 
          directory', startingDir, QtWidgets.QFileDialog.ShowDirsOnly)
        if directory:
            self.lineEdit_2.setText(directory)
        else:
            self.lineEdit_2.setText('')
            QtWidgets.QMessageBox.critical(Form, "Alert", "No folder selected.", 
                                                     QtWidgets.QMessageBox.Close)

    def resultfolderselector(self):
        path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
        startingDir = path
        directory = QtWidgets.QFileDialog.getExistingDirectory(None, 'Open working 
                       directory', startingDir, QtWidgets.QFileDialog.ShowDirsOnly)
        if directory:
            self.lineEdit_3.setText(directory)
        else:
            self.lineEdit_3.setText('')
            QtWidgets.QMessageBox.critical(Form, "Alert", "No folder selected.", 
                                                     QtWidgets.QMessageBox.Close)

    def plot_data(self):
        # self.figure.plot()            # comment this line
        # self.canvas.setParent(self)   # comment this line
        self.verticalLayout.addWidget(self.matplot)  # <--- Add this line

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())
Sign up to request clarification or add additional context in comments.

5 Comments

The graph on the plot is getting generated when i run the app, it should not do that way, it should instead show the plot when i hit the "pushbutton_2" which is the "Submit" Button in the "ui_form"....I have already written a self.connect to "submit" button but its throwing an error as "AttributeError: 'Ui_Form' object has no attribute 'matplot'" may be i am missing something here again.
@JohnK. The solution is, under function plot_data() erase self.figure.plot() and self.canvas.setParent(self), and add this code line self.verticalLayout.addWidget(self.matplot). The final code is added.
@JohnK, If my answer helps you, do not forget to mark it as correct.
Thanks a lot. Worked perfectly. what if i want to clear the plot and re-generate it on every click of submit button?
You could post and ask another question. provide your code and explain exactly what is it you want to? I think you have to use slot and signal method.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.