PyQt Widgets¶
QPushbutton¶
Imports¶
```QtWidgets```
Declaration¶
```chromeButton = QPushButton("Chrome")```
Run code on click¶
chromeButton.clicked.connect(self.setOutputChrome)
def setOutputChrome(self):
self.setOutput(self.plainTextEdit.toPlainText(), 'chrome', self.lineEdit.text(), self.lineEdit2.text())
QComboBox¶
PyQt4: QCombobox PyQt5: QCombobox Qt5 QCombobox
imports¶
```QtWidgets.QComboBox```
Allow user to add their own values / Disable¶
```myCombo.setEditable(False)```
QLabel¶
Imports¶
Attach to another control¶
This sets the label to be associated with another widget (a "buddy"). When two widgets are associated as buddies, they count as one for focus events. For example, if a label and a lineedit are buddies, a focus move will skip the label and move into the lineedit.
listLabel = QLabel(&List")
self.listWidget = QListWidget()
listLabel.setBuddy(self.listWidget)
QTableView¶
Imports¶
from PyQt5.QtWidgets import QTableView
Selection Types¶
Set selection method to selecting the whole row:
self.tableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
QtMenu¶
Imports¶
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QMenu, QAction, QActionGroup)
from PyQt5.QtGui import QKeySequence
Create menu and assign to menubar¶
self.fileMenu = self.menuBar().addMenu("&File")
Assign command to a menu¶
self.fileMenu.addAction(self.dumpdbAct)
def createActions(self):
# self.newAct = QAction("&New", self, shortcut=QKeySequence.New,
# statusTip="Create a new file", triggered=self.newFile)
self.dumpdbAct = QAction("&Dump database", self,
statusTip="Add a new book", triggered=self.addBook)
self.promotebookAct = QAction("&Promote Book", self,
statusTip="Add a new book", triggered=self.addBook)
self.addbookAct = QAction("&Add Book", self, shortcut=QKeySequence.New,
statusTip="Add a new book", triggered=self.addBook)
def createMenus(self):
# Set up headline menus
self.fileMenu = self.menuBar().addMenu("&File")
self.editMenu = self.menuBar().addMenu("&Edit")
self.seriesMenu = self.menuBar().addMenu("&Series")
self.statusMenu = self.menuBar().addMenu("S&tatus")
self.scanMenu = self.menuBar().addMenu("S&can")
# set up file menu
# self.fileMenu.addAction(self.newAct)
# actions - dump database, export list (book, series etc.) to
# csv etc.
self.fileMenu.addAction(self.dumpdbAct)
QtAction¶
Used to unify actions across different methods of accessing the actions i.e. menu, keyboard
Create¶
self.dumpdbAct = QAction("&Dump database", self,
statusTip="Add a new book", triggered=self.addBook)
Assign to a menu¶
self.fileMenu = self.menuBar().addMenu("&File")
self.fileMenu.addAction(self.dumpdbAct)
def createActions(self):
# self.newAct = QAction("&New", self, shortcut=QKeySequence.New,
# statusTip="Create a new file", triggered=self.newFile)
self.dumpdbAct = QAction("&Dump database", self,
statusTip="Add a new book", triggered=self.addBook)
self.promotebookAct = QAction("&Promote Book", self,
statusTip="Add a new book", triggered=self.addBook)
self.addbookAct = QAction("&Add Book", self, shortcut=QKeySequence.New,
statusTip="Add a new book", triggered=self.addBook)
def createMenus(self):
# Set up headline menus
self.fileMenu = self.menuBar().addMenu("&File")
self.editMenu = self.menuBar().addMenu("&Edit")
self.seriesMenu = self.menuBar().addMenu("&Series")
self.statusMenu = self.menuBar().addMenu("S&tatus")
self.scanMenu = self.menuBar().addMenu("S&can")
# set up file menu
# self.fileMenu.addAction(self.newAct)
# actions - dump database, export list (book, series etc.) to
# csv etc.
self.fileMenu.addAction(self.dumpdbAct)
QtActionGroup¶
Keeps a set of QtAction together. Normally exclusive - only one can be checked (c.f. radiobuttons) but behaviour can be turned off with exclusive = False
http://doc.qt.io/qt-4.8/qactiongroup.html
http://doc.qt.io/qt-5/qactiongroup.html
Create¶
alignmentGroup = QActionGroup(self)
Add actions to group¶
alignmentGroup.addAction(leftAlignAct)
alignmentGroup.addAction(rightAlignAct)
alignmentGroup.addAction(justifyAct)
alignmentGroup.addAction(centerAct)
Check / activate one of the options¶
leftAlignAct.setChecked(true)
Layouts¶
QHBoxLayout¶
Imports¶
```QtQWidgets```
Declaration¶
```hbox = QHBoxLayout()```
Add widgets to layout¶
hbox.addWidget(chromeButton)
hbox.addWidget(firefoxButton)
Options¶
hbox.addStretch(1)
Add highest layout to form¶
self.setLayout(hbox)
Windows and Dialogs¶
QMainWindow¶
Layouts¶
A Layout cannot be applied directly as the central (top-most) widget.
A blank or dummy widget must be created and the Layout inserted into the widget ... as if it were a Layout.
window = QWidget()
window.setLayout(vbox)
self.setCentralWidget(window)
QMessageBox¶
QMessageBox.critical(None, "Cannot open database",
"Unable to establish a database connection.\n"
"This example needs SQLite support. Please read the Qt SQL "
"driver documentation for information how to build it.\n\n"
"Click Cancel to exit.",
QMessageBox.Cancel)
Collections¶
QStringList¶
http://pyqt.sourceforge.net/Docs/PyQt4/qstringlist.html http://pyqt.sourceforge.net/Docs/PyQt5/api/qstringlistmodel.html https://doc.qt.io/qt-5/qstringlistmodel.html
Notes: A Python list of strings can be used whenever a QStringList is expected and therefore this is unnecessary
Imports¶
```QtCore```
Function¶
QtSQL¶
from PyQt5.QtCore import Qt
from PyQt5.QtSql import QSqlQuery, QSqlQueryModel
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
Create database connection¶
db = QSqlDatabase.addDatabase('QODBC3')
conn_str = (r'driver={ODBC Driver 13 for SQL Server};server=BASE2;port=1443;
UID=sa;PWD=9jFJg4F92vi7p6vT;database=AdventureWorks2012')
db.setDatabaseName(conn_str)
db.open()
Query the database¶
query = QSqlQuery()
query.exec_("""SELECT TOP(5) * FROM Person.Person""")
Get each record¶
while query.next():
rec = query.record()
for i in range(rec.count()):
print(rec.value(i))
PyQt exit codes and output¶
Sample¶
class GatherText(QDialog):
...
self.output = {'Content':'', 'Browser':'', 'Modifier':'', 'Date':''}
...
self.accept()
...
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = GatherText()
# ex.exec_()
# print('Content: \t' + ex.output['Content'] +
# '\nBrowser: \t' + ex.output['Browser'] +
# '\nDate: \t\t' + ex.output['Date'])
# exit()
sys.exit(app.exec_())
Normal use¶
If no return value is required:
ex = GatherText()
sys.exit(app.exec_())
This closes the dialog and exits the routine. For example, a program to zip files.
Obtain return values¶
To run the program and obtain the values:
ex = GatherText()
ex.exec_()
print(ex.output)
This closes the dialog, exits the routine and makes any variables available for collection.
Test return values¶
To run the program and test for the output:
ex = GatherText()
ex.exec_()
if ex.result() == 0:
print('Cancelled', ex.output)
if ex.result() == 1:
print('1', ex.output)
Exit types¶
Use self.close(), self.reject(), self.accept(), self.done(int) in a function to exit the application.
self.close() is 0
self.reject() is 0
self.accept() is 1
self.done(int) is int value for edge cases
Right-click menu¶
Using Subclassing, Actions and Signal/Slot.¶
https://wiki.python.org/moin/PyQt/Handling%20context%20menus
QtContextMenu docs: https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/core/Qt.ContextMenuPolicy.html
ActionsContextMenu: https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/core/Qt.ContextMenuPolicy.html#ActionsContextMenu
Context Menu¶
Usually, the right mouse click is connected to the context menu. With
but.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
but.customContextMenuRequested.connect(handle_right_click)
you can connect a handler, which could be used for the right mouse click.
http://stackoverflow.com/questions/30627923/pyqt-python-creating-right-mouse-click-for-qpushbutton
Context menu policy¶
In the ControlMainWindow class add the following to initialise the Context menu policy as CustomContextMenu where listWidget_extractedmeters will be the name of your QListWidget:
self.listWidget_extractedmeters.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.listWidget_extractedmeters.connect(self.listWidget_extractedmeters,QtCore.SIGNAL("customContextMenuRequested(QPoint)" ), self.listItemRightClicked)
Then in the ControlMainwindow class the following functions allow you to add context menu items and to call a funtion that performs some functionality:
def listItemRightClicked(self, QPos):
self.listMenu= QtGui.QMenu()
menu_item = self.listMenu.addAction("Remove Item")
self.connect(menu_item, QtCore.SIGNAL("triggered()"), self.menuItemClicked)
parentPosition = self.listWidget_extractedmeters.mapToGlobal(QtCore.QPoint(0, 0))
self.listMenu.move(parentPosition + QPos)
self.listMenu.show()
def menuItemClicked(self):
currentItemName=str(self.listWidget_extractedmeters.currentItem().text() )
print(currentItemName)
http://stackoverflow.com/questions/31380457/add-right-click-functionality-to-listwidget-in-pyqt4
Links¶
http://joat-programmer.blogspot.co.uk/2012/02/pyqt-signal-and-slots-to-capture-events.html | Jack of all trades programmer: PyQt Signals and Slots
http://pysnippet.blogspot.co.uk/2010/01/new-style-pyqt-signals-and-slots.html | PySnippet: New-style PyQt Signals and Slots
http://www.cyberciti.biz/tips/howto-linux-unix-find-move-all-mp3-file.html | Finding All .mp3 Files And Move To a New Directory From A Shell Prompt - nixCraft
http://www.pythoncentral.io/pyside-pyqt-tutorial-the-qlistwidget/?PageSpeed=noscript | PySide/PyQt Tutorial: The QListWidget - Python Central
http://www.pythoncentral.io/pysidepyqt-tutorial-creating-your-own-signals-and-slots/?PageSpeed=noscript | PySide/PyQt Tutorial: Creating Your Own Signals and Slots - Python Central
http://www.sthurlow.com/python/lesson06/ | Lesson 6 - Tuples, Lists, and Dictionaries
http://www.qtcentre.org/threads/25705-How-to-add-subitem-in-treewidget | How to add subitem in treewidget
http://qt-project.org/doc/qt-4.8/qtreewidgetitem.html | QTreeWidgetItem Class Reference | Documentation | Qt Project
http://stackoverflow.com/questions/12737721/developing-pyqt4-tree-widget | qtreeview - Developing pyqt4 tree widget - Stack Overflow
https://plus.google.com/103196608802087410670/posts/RQsvgvyJ4FS | Programming with Python - Google+
https://www.daniweb.com/software-development/python/threads/256274/pyqt-qspinbox-mouse | PyQT, QSpinBox, mouse | DaniWeb
http://stackoverflow.com/questions/20898897/label-displays-sum-of-two-qspinbox-python-pyside | pyqt - label displays sum of two QSpinBox (Python + Pyside)? - Stack Overflow
http://pyqt.sourceforge.net/Docs/PyQt4/qspinbox.html | QSpinBox Class Reference
http://rosettacode.org/wiki/Python | Category:Python - Rosetta Code
http://doc.qt.io/qt-5/qabstractitemview.html#EditTrigger-enum | QAbstractItemView Class | Qt Widgets 5.4
http://www.saltycrane.com/blog/?page=2 | SaltyCrane Blog
http://thomas-cokelaer.info/blog/2012/10/pyqt4-example-of-tablewidget-usage/ | PyQt4: example of TableWidget usage | Thomas Cokelaer's blog
http://www.qtcentre.org/threads/37205-PyQt4-Inserting-data-from-array-to-QTableWidget | PyQt4 - Inserting data from array to QTableWidget
http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidgetitem.html | QTableWidgetItem Class Reference
http://www.saltycrane.com/blog/2007/06/more-pyqt-example-code/ | More PyQt example code « SaltyCrane Blog
http://stackoverflow.com/questions/11729472/adding-data-to-qtablewidget-using-pyqt4-in-python | pyqt - Adding data to QTableWidget using PyQt4 in Python - Stack Overflow
http://zetcode.com/gui/pyqt4/ | PyQt4 tutorial
http://qt-project.org/doc/qt-4.8/qstandarditemmodel.html#details | QStandardItemModel Class Reference | Documentation | Qt Project
http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/?PageSpeed=noscript | PySide/PyQT Tutorial: QListView and QStandardItemModel | Python Central
http://qt-project.org/doc/qt-4.8/qstringlistmodel.html#details | QStringListModel Class Reference | Documentation | Qt Project
http://www.bogotobogo.com/Qt/Qt5_QListView_QStringListModel_ModelView_MVC.php | Qt5 Tutorial ModelView with QListView and QStringListModel - 2015
http://zetcode.com/db/sqlitepythontutorial/ | SQLite Python tutorial
http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/?PageSpeed=noscript | PySide/PyQT Tutorial: QListView and QStandardItemModel | Python Central
http://bytes.com/topic/python/answers/452460-pyqt-qlistview-how-retrieve-selected-items | PyQt: QListView how to retrieve selected items? - Python
http://qt-project.org/forums/viewthread/28793 | Getting current index from a QListView model | Qt Project forums | Qt Project
http://qt-project.org/forums/viewthread/25409 | [Solved] Signal when a QListView selection changes due to keyboard activity? | Qt Project forums | Qt Project
http://qt-project.org/forums/viewthread/16059 | [SOLVED]How to get a selected item from QListWidget ? | Qt Project forums | Qt Project
http://stackoverflow.com/questions/11246022/how-to-get-qstring-from-qlistview-selected-item-in-qt | How to get QString from QListView selected item in Qt? - Stack Overflow
http://stackoverflow.com/questions/14546913/how-to-get-item-selected-from-qlistview-in-pyqt | python - How to get item selected from QListView in PyQt - Stack Overflow
http://stackoverflow.com/questions/21313044/retrieve-selected-item-from-qlistview-pyqt | python - Retrieve selected item from QListView PyQt - Stack Overflow
http://www.qtcentre.org/threads/32007-SetSelection-QListView-Pyqt | SetSelection QListView Pyqt
http://zetcode.com/lang/python/strings/ | Strings in Python
http://www.pythoncentral.io/pyside-pyqt-tutorial-the-qlistwidget/?PageSpeed=noscript | PySide/PyQt Tutorial: The QListWidget - Python Central
http://en.wikibooks.org/wiki/Python_Programming/PyQt4 | Python Programming/PyQt4 - Wikibooks, open books for an open world
http://www.riverbankcomputing.com/pipermail/pyqt/2012-March/031301.html | [PyQt] get list of selected items in a listWidget
http://qt-project.org/doc/qt-4.8/qlistview.html#selectedIndexes | QListView Class Reference | Documentation | Qt Project
http://stackoverflow.com/questions/19605302/how-to-get-the-selectionchange-event-in-pyqt4-for-qlistview | How to get the selectionchange event in PyQt4 for QListView - Stack Overflow
http://pyqt.sourceforge.net/Docs/PyQt4/qstringlistmodel.html | QStringListModel Class Reference
http://pyqt.sourceforge.net/Docs/PyQt4/qabstractitemmodel.html | QAbstractItemModel Class Reference
http://pyqt.sourceforge.net/Docs/PyQt4/qstandarditemmodel.html | QStandardItemModel Class Reference
http://www.qtcentre.org/threads/53618-QStringListModel-doesn-t-update-when-QStringList-is-updated | QStringListModel doesn't update when QStringList is updated
http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidget.html | QListWidget Class Reference
http://stackoverflow.com/questions/21566556/how-to-get-a-current-items-info-from-qtgui-qlistwidget | python - How to get a current Item's info from QtGui.QListWidget? - Stack Overflow
http://qt-project.org/doc/qt-4.8/model-view-programming.html | Model/View Programming | Documentation | Qt Project
https://www.commandprompt.com/community/pyqt/x2976.htm | Basic widgets
https://www.commandprompt.com/community/pyqt/x3270.htm | Advanced widgets