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.
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 :
- How to create a notepad in Qt using PyQt4
- A first program in Qt using PyQt4
- Changing button layouts
- An introduction to Qt, in C++
- Qt Signals and Slots doc
- PyQt Signals and Slots doc
- Pyside tutorials
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()