QPushButton
在任何 GUI 设计中,命令按钮都是最重要和最常用的控件。 任何计算机用户都熟悉带有保存、打开、确定、是、否和取消等作为标题的按钮。 在 PyQt API 中,QPushButton 类对象提供了一个按钮,当单击该按钮时,可以对其进行编程以调用某个函数。
QPushButton 类从 QAbstractButton 类继承其核心功能。 它是矩形的,并且可以在其正面显示文本标题或图标。
QPushButton 可以显示文本和图标。
1、QPushButton创建
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt5.QtGui import QIcon, QPixmap
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
btn1 = QPushButton('&Button1', self)
btn1.setCheckable(True)
btn1.toggle()
btn2 = QPushButton(self)
btn2.setText('Button&2')
btn3 = QPushButton('Button3', self)
btn3.setEnabled(False)
vbox = QVBoxLayout()
vbox.addWidget(btn1)
vbox.addWidget(btn2)
vbox.addWidget(btn3)
self.setLayout(vbox)
self.setWindowTitle('QPushButton')
self.setGeometry(300, 300, 300, 200)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
上面示例中,使用 PushButton 类创建一个按钮。 第一个参数指定按钮上显示的文本,第二个参数指定按钮所属的父类。
btn1 = QPushButton('&Button1', self)
如果要在按钮上指定快捷方式,只需在字符前面插入与号 (‘&’),如下所示。 此按钮的快捷键是“Alt+b”。
将 setCheckable() 设置为 True 将允许保持选中或未选中状态。
如果调用 toggle() 方法,按钮的状态会发生变化。 因此,该按钮在程序启动时被选中。
btn2 = QPushButton(self)
btn2.setText('Button&2')
setText() 方法还允许指定要在按钮上显示的文本。 此按钮的快捷键也将是“Alt+2”。
btn3 = QPushButton('Button3', self)
btn3.setEnabled(False)
如果 setEnabled() 设置为 False ,则按钮将变得不可用。
运行结果如下:
下面示例演示如何连接QPushButton的信号(Signal)与槽(Slot):
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QHBoxLayout
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout()
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QApplication.instance().quit)
hbox.addWidget(qbtn)
hbox.addStretch(1)
self.setLayout(hbox)
self.move(300, 300)
self.setWindowTitle('Quit button')
self.show()
def main():
app = QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
在上面代码中,我们将 clicked 信号连接到 QApplication 的退出函数:
qbtn.clicked.connect(QApplication.instance().quit)
当点击QPushButton时,应用程序退出。 关于信号、槽事件,请参考前面文章:
2、显示图标
import sys
import os
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QHBoxLayout
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout()
btn1 = QPushButton(QIcon('resources/n1.png'), 'Exit', self)
btn2 = QPushButton(QIcon('resources/n2.png'), 'Save', self)
btn3 = QPushButton(QIcon('resources/n3.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 = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
上面代码演示了如何向QPushButton传递QIcon 对象参数创建显示图标的QPushButton:
btn1 = QPushButton(QIcon('resources/n1.png'), 'Exit', self)
第一个参数为QIcon 对象;第二个参数为显示文本参数,第三个参数为父对象参数
3、Toggle状态
Toggle按钮是特殊模式下的 QPushButton。 它是一个有两种状态的按钮:按下和未按下。 我们通过单击在这两种状态之间切换。 使用 setCheckable 函数创建一个切换按钮。
from PyQt5.QtWidgets import (QWidget, QPushButton, QHBoxLayout, QVBoxLayout,
QFrame, QApplication)
from PyQt5.QtGui import QColor
import sys
class MainWindow(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 = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
上述示例包含三个Toggle按钮和一个 QWidget。 我们将 QWidget 的背景颜色设置为黑色。 切换按钮切换颜色值的红色、绿色和蓝色部分。 背景颜色取决于按下的切换按钮。运行结果如下:
|