PyQt QPushButton
last modified August 24, 2023
In this article we show how to work with QPushButton widget.
Visit Advanced PyQt5 e-book, read PyQt5 tutorial, or list all PyQt tutorials.
PyQt QPushButton
QPushButton
is a widget which executes an action when a user clicks
on it. A QPushButton
can display text and icons.
A push button emits the signal clicked
when it is activated by the
mouse, the Spacebar or by a keyboard shortcut.
QPushButton example
The following example creates a quit button. When we click on the button, the applicaiton terminates.
#!/usr/bin/python import sys from PyQt6.QtWidgets import QWidget, QPushButton, QApplication, QVBoxLayout from PyQt6.QtCore import Qt class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): vbox = QVBoxLayout() qbtn = QPushButton('Quit', self) vbox.setAlignment(Qt.AlignmentFlag.AlignLeft) qbtn.clicked.connect(QApplication.instance().quit) vbox.addWidget(qbtn) vbox.addStretch(1) self.setLayout(vbox) self.setGeometry(400, 400, 400, 300) self.setWindowTitle('Quit button') self.show() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
The QPushButton
is placed in a QVBoxLayout
.
qbtn = QPushButton('Quit', self)
The QPushButton
is created. The button shows only text.
qbtn.clicked.connect(QApplication.instance().quit)
We connect the clicked
signal to QApplication's
quit
function.
QPushButton with icon
The QPushButton
can display text with an icon.
#!/usr/bin/python import sys from PyQt6.QtGui import QIcon from PyQt6.QtWidgets import QWidget, QPushButton, QApplication, QHBoxLayout class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() btn1 = QPushButton(QIcon('exit.png'), 'Exit', self) btn2 = QPushButton(QIcon('save.png'), 'Save', self) btn3 = QPushButton(QIcon('new.png'), 'New', self) hbox.addWidget(btn1) hbox.addWidget(btn2) hbox.addWidget(btn3) hbox.addStretch(1) self.setLayout(hbox) self.move(300, 300) self.setWindowTitle('Icons') self.show() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
In the example, we have three buttons. We pass a QIcon
as
the first parameter to QPushButton
.
QPushButton toggle button
A toggle button is a QPushButton
in a special mode. It is a button
that has two states: pressed and not pressed. We toggle between these two states
by clicking on it. A toggle button is created with setCheckable
function.
#!/usr/bin/python from PyQt6.QtWidgets import (QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QFrame, QApplication) from PyQt6.QtGui import QColor import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() vbox = QVBoxLayout() self.col = QColor(0, 0, 0) redb = QPushButton('Red', self) redb.setCheckable(True) redb.clicked.connect(self.setColor) greenb = QPushButton('Green', self) greenb.setCheckable(True) greenb.clicked.connect(self.setColor) blueb = QPushButton('Blue', self) blueb.setCheckable(True) blueb.clicked.connect(self.setColor) hbox.addWidget(redb) hbox.addWidget(greenb) hbox.addWidget(blueb) self.square = QFrame(self) self.square.setFixedSize(180, 180) self.square.setStyleSheet("QWidget { background-color: %s }" % self.col.name()) vbox.addLayout(hbox) vbox.addWidget(self.square) self.setLayout(vbox) self.move(300, 300) self.setWindowTitle('Toggle button') self.show() def setColor(self, pressed): source = self.sender() if pressed: val = 255 else: val = 0 if source.text() == 'Red': self.col.setRed(val) elif source.text() == 'Green': self.col.setGreen(val) else: self.col.setBlue(val) self.square.setStyleSheet('QFrame { background-color: %s }' % self.col.name()) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
The example contains three toggle buttons and a QWidget
. We set the
background colour of the QWidget
to black. The toggle buttons
toggles the red, green, and blue parts of the colour value. The background
colour depends on which toggle buttons are pressed.
self.col = QColor(0, 0, 0)
This is the initial, black colour value.
redb = QPushButton('Red', self) redb.setCheckable(True)
To create a toggle button, we create a QPushButton
and make it
checkable by calling the setCheckable
function.
redb.clicked.connect(self.setColor)
We connect a clicked
signal to our user defined function.
source = self.sender()
We get the button which was toggled with sender
function.
if source.text() == 'Red': self.col.setRed(val)
In case it is a red button, we update the red part of the colour accordingly.
self.square.setStyleSheet('QFrame { background-color: %s }' % self.col.name())
We use style sheets to change the background colour. The stylesheet is updated
with setStyleSheet
function.
In this article we have presented the PyQt QPushButton
widget.
Author
List all PyQt tutorials\.