[PyQt] problem with figure in pyqt

nimi pillai nimi.snowhills at gmail.com
Sun Mar 27 19:46:51 BST 2011


Hi,

I want an application that displays a plot when a 'plot ' button is clicked.
My code is given below. The figure window doesnot appear when i run the
code. But if there is any error as i hav commented '#plt' the figure window
appears. Can someone please tell me why this happens?


from PyQt4 import QtGui
from PyQt4 import QtCore
from matplotlib.backends.backend_qt4agg \
  import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg \
  import NavigationToolbar2QTAgg as NavigationToolbar
from matplotlib.backends.backend_qt4agg \
           import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as n
import sys
import os

# that contains 2 pushbuttons ; 1st for plt ,2nd for close
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 170, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(270, 170, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.pushButton_2,
QtCore.SIGNAL("clicked()"), MainWindow.close)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow",
"MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow",
"Plot", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_2.setText(QtGui.QApplication.translate("MainWindow",
"close", None, QtGui.QApplication.UnicodeUTF8))


#canvas widget
class MplCanvas(FigureCanvas):
       def __init__(self,parent=None):
           self.fig = Figure()
           self.ax = self.fig.add_subplot(111)
           FigureCanvas.__init__(self, self.fig)
           self.fig.clf()


class MplWidget(QtGui.QWidget):

       def __init__(self, parent = None):
           QtGui.QWidget.__init__(self, parent)
           self.canvas = MplCanvas()
           self.ntb = NavigationToolbar(self.canvas, self.canvas)
           self.v = QtGui.QVBoxLayout()
           self.v.addWidget(self.canvas)
           self.v.addWidget(self.ntb)
           self.ax=self.canvas.ax
           self.setLayout(self.v)

class MyForm(QtGui.QMainWindow):

  def __init__(self, parent=None):
    QtGui.QWidget.__init__(self, parent)
    self.ui = Ui_MainWindow()
    self.ui.setupUi(self)
    QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"),
self.plot)

  def plot(self):
     w=MplWidget()
     x=n.arange(0,20)
     y=n.sin(x)
     print x
     print y
     y1=n.cos(x)
     w.ax.plot(x,y)
     #w.canvas.ax.plot(x,y1)
     w.show()
     plt


if __name__ == "__main__":
  app = QtGui.QApplication(sys.argv)
  myapp = MyForm()
  myapp.show()
  sys.exit(app.exec_())
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20110327/0527b1a6/attachment.html>


More information about the PyQt mailing list