按钮控件(QPushButton)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class QPushButtonDemo(QDialog):
def __init__(self):
super(QPushButtonDemo, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QPushButton Demo")
self.resize(400, 300)
layout = QVBoxLayout()
# 创建button时可以设置button上的文本
self.button1 = QPushButton("第1个按钮")
# 也可以通过setText方法来设置button的文本
self.button1.setText("First Button1")
# 设置按钮类型为按下后不回弹起
self.button1.setCheckable(True)
# 绑定按钮和槽函数,其中使用lambda表达式来规定信号传入槽函数的参数
self.button1.clicked.connect(lambda:self.whichButton(self.button1))
# 按钮再绑定一个槽函数
self.button1.clicked.connect(self.buttonState)
# 在文本前显示图像
self.button2 = QPushButton("图像按钮")
self.button2.setIcon(QIcon("./image/pic1.ico"))
self.button2.clicked.connect(lambda:self.whichButton(self.button2))
# 设置一个不可用的按钮
self.button3 = QPushButton("不可用")
self.button3.setEnabled(False)
# 设置一个热键为Alt+M,且为默认按钮的按钮
self.button4 = QPushButton("&MyButton")
self.button4.setDefault(True)
self.button4.clicked.connect(lambda:self.whichButton(self.button4))
layout.addWidget(self.button1)
layout.addWidget(self.button2)
layout.addWidget(self.button3)
layout.addWidget(self.button4)
self.setLayout(layout)
def buttonState(self):
if self.button1.isCheckable():
print("按钮1已经被选中")
else:
print("按钮1未被选中")
def whichButton(self, btn):
print("被单击的按钮是")
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QPushButtonDemo()
main.show()
sys.exit(app.exec_())
运行效果:
可以看到,按钮的文本有两种设置方法,一种是在设置QPushButton对象时,填入按钮名称,作为参数创建一个;第二种是在创建完后,使用QPushButton对象的setText()方法设置。
此处,我们还使用了setCheckable()(设为True)来将按钮设置为按下去不会弹起。
与其他的控件对象类似,QPushButton对象可以通过setIcon()对象来设置按钮的图标,参数是一个可以用图片的文件路径初始化的QIcon对象。
注意到这里的信号和槽函数绑定操作使用了lambda表达式,作用是指定信号触发后&