Creating an rudimentary interactive application in python with Pyface and Qt

So, I wanted to learn the Qt windowing framework and I wanted to be able to write code in Python, which I am comfortable with, instead of using C++. Pyface is one such projects that let you create and communicate with GUI elements made with Qt from Python. Coincidentally, it's one of the open source projects that my employer created and maintains.

Here you can see an example code that creates a window with a text area, created using the QTextEdit class. Given that I would like to know what's written in the text area, I can use the toPlainText() method of a QTextEdit object. Further, I would like to have some buttons which do something I want them to when the user clicks on them. Buttons are QPushButton() objects and object.clicked.connect.() method call links the button to a function/method/action of our liking. The layout of the text area and the buttons are set using a QVBoxLayout object.

Three references which helped me are mentioned at the top of the file. A first version of the code is also mentioned at the top of the file. Note that you will need the pyface Python library installed to be able to run the code. And, syntax and code highlighting is provided by this awesome website, which I sadly only just came across.

A few more references, if you would like, are :


As always, comments and suggestions are always welcome and are highly appreciated. Thank you.


# http://doc.qt.io/qt-4.8/gettingstartedqt.html 
# http://zetcode.com/gui/pyqt4/firstprograms/
# https://doc.qt.io/archives/qq/qq19-buttons.html

"""
from pyface.qt.QtGui import QApplication
from pyface.qt.QtGui import QTextEdit

import sys

def main():
 app = QApplication(sys.argv)
 textEdit = QTextEdit()
 textEdit.show()

 app.exec_()
 return
"""
import time 
import sys

from pyface.qt.QtGui import *
from pyface.qt.QtCore import QCoreApplication

class mainclass():

    app = QApplication(sys.argv)
    textEdit = QTextEdit()


    progressBar = QProgressBar()

    def on_ok(self):
     print 'yay'

    def on_quit(self):
 messageBox = QMessageBox()
 messageBox.setWindowTitle("Quit Notepad")
 messageBox.setText("Do you really want to quit?")
 messageBox.setStandardButtons(QMessageBox().Yes | QMessageBox().No)
 messageBox.setDefaultButton(QMessageBox().No)
 if messageBox.exec_() == QMessageBox().Yes:
  qApp.quit()

    def on_cancel(self):
        print 'do you want to cancel?'

    def on_print(self):
        print self.textEdit.toPlainText()

    def updateProgressBar(self):
        for i in range(100):
            self.progressBar.setValue(i)
            time.sleep(1)

    def main(self):
 quitButton = QPushButton("Quit")
# quitButton.clicked.connect(QCoreApplication.instance().quit)
 quitButton.clicked.connect(self.on_quit)

 cancelButton = QPushButton("Cancel")
        cancelButton.clicked.connect(self.on_cancel)
        okButton = QPushButton("OK")
 okButton.clicked.connect(self.on_ok)
        printButton = QPushButton("Print")
        printButton.clicked.connect(self.on_print)

        updateProgressBarButton = QPushButton("Update Progress Bar")
        updateProgressBarButton.clicked.connect(self.updateProgressBar)

        box = QDialogButtonBox()
 box.addButton("Apply", QDialogButtonBox().ApplyRole)

 layout = QVBoxLayout()
 layout.addWidget(self.textEdit)
 layout.addWidget(quitButton)
 layout.addWidget(cancelButton)
 layout.addWidget(okButton)
        layout.addWidget(printButton)
        layout.addWidget(self.progressBar)
        layout.addWidget(updateProgressBarButton)
        layout.addWidget(box)

 window = QWidget()
 window.setLayout(layout)
 window.setWindowTitle("Notepad : Poruri Sai Rahul")

 window.show()

 return self.app.exec_()

if __name__ == "__main__":
 test = mainclass()
        test.main()


Popular posts from this blog

Animation using GNUPlot

Pandas download statistics, PyPI and Google BigQuery - Daily downloads and downloads by latest version

Adaptive step size Runge-Kutta method