PySideSimplicissimus Module 2 CloseButton
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
- Note: this article is a member of the multipart PySide_Newbie_Tutorials
Close
This will not take you more than 5 minutes: the purpose of this program is to enable a click on the pushButton to close the execution of this program. As always when editing .ui files, we start in the Qt Designer. Read the getting to know Qt Designer document now if you are unfamiliar with Qt Designer. We call the program rather colourfully, quitter, so that our Designer created MainWindow with one button is saved as quitter.ui.
All current source code for "Close", "About", "Show Licence", all versions of "Combined", "Engineering Application" aka "truss" are stored in one repository tuts4pyside. For your convenience, please install a copy of the repository with the following command:
git clone https://github.com/OldAl/tuts4pyside
If you do not have git, pllease install it first. To convert quitter.ui to a python readable format, ui_quitter.py, do the following
pyside-uic quitter.ui -o ui_quitter.py
The file naming is convenient as one needs to remember only one name: quitter. The rest of the name helps recognise the purpose of the file.
Note: If you don't have setuptools installed, you will get an error when trying to execute pyside-uic
Traceback (most recent call last):
File "c:26\Scripts\pyside-uic-script.py", line 5, in <module>
from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
You can find setuptools here: http://pypi.python.org/pypi/setuptools
The listing of the program follows:
#!/usr/bin/env python
# quitter.py- provide a button to quit this "program"
import sys
from PySide.QtGui import QMainWindow, QPushButton, QApplication
from ui_quitter import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
frame = MainWindow()
frame.show()
app.exec_()
If you run the program, you will find that it can be closed either by the usual click on the [x], or click of the button. An image of the GUI can be seen if you click on the following link:
Now look closely at the code. Where is the code enabling the button to close the program? It surely is not in the listing…
The reason for its absence is that it has been created on the Qt Designer, which has a signal-slot editor. We used it surreptitiously to connect PushButton.click() "signal" to MainWindow.close() "slot". It is imbedded in the quitter.ui file and following the conversion, in the ui_quitter.py file. And from that file, we imported Ui_MainWindow class, which is one of the ancestors of our MainWindow class. We use Python's multiple inheritance to facilitate use of methods in the ui_quitter.py module.
There are other ways to "skin the cat" and we could avoid dual inheritance, but why not use it when it is convenient? The super digs deeper into the ancestry and initialises the immediate ancestor of MainWindow and thus the whole tree of ancestry.
You will notice that the init method of the MainWindow specifies the ancestor as None. That is kind of indication to PySide that the MainWindow is indeed the Main Window of the program.