阅读这篇的前提是已经默认了解了PyQt5的基础框架。我们进一步介绍如何创建按钮和触发点击事件。代码如下:

# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton


class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.resize(600, 300)
self.setWindowTitle('创建按钮和按钮点击事件的例子')

self.button1 = QPushButton('按键1', self)
self.button1.clicked.connect(self.clickButton)

def clickButton(self):
sender = self.sender()
print(sender.text() + '被点击')


if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

各个语句的解释:
​​ ​self.button1 = QPushButton('按键1', self)​ ​​:创建一个按钮对象,按钮对象上的文字显示为​ ​按键1​ ​​,第二个参数​ ​self​ ​​表示我们将这个创建好的按钮对象放置在我们已经创建好的​ ​QMainWindow​ ​​对象上。
​​ ​self.button1.clicked.connect(self.clickButton)​ ​​:当我们点击创建的按钮​ ​按键1​ ​​时,执行我们自定义的​ ​clickButton​ ​函数。 注意这里的self.clickButton不能够带括号,否则会报错 。self.button1.clicked.connect()的参数是按键点击后关联的一个对象名称,我们知道​ ​self.clickButton​ ​​代表函数对象名称,而​ ​self.clickButton()​ ​​表示的是一个函数对象。关于这个的详细说明可以参考python 函数存放在列表中并调用​
​​ ​sender = self.sender()​ ​​:这里的​ ​self.sender()​ ​​指的是发送信号的对象,这样子我们就可以获取到发送信号的对象​ ​按键1​ ​​。
​​ ​sender.text()​ ​​:获取发送信号对象的名字,这样我们就可以得到​ ​按键1​ ​的名字。

最终运行后的效果如下:

PyQt5创建按钮和触发点击事件_python


拓展:上面我们说到​ ​self.button1.clicked.connect(self.clickButton)​ ​​中的按键点击事件关联对象​ ​self.clickButton​ ​​不能够带括号。但是这里如果我们一定要使用带括号的形式是不是不行呢?答案是否定的,我们可以采用​ ​lambda​ ​函数来解决这一问题。代码如下:

# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton


class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.resize(600, 300)
self.setWindowTitle('创建按钮和按钮点击事件的例子')

self.button1 = QPushButton('按键1', self)
self.button1.clicked.connect(lambda: self.clickButton())

def clickButton(self):
sender = self.sender()
print(sender.text() + '被点击')


if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

运行后我们也可以实现最终的效果,但是这里不推荐使用,在使用了​ ​lambda​ ​函数后可以明显感觉到程序响应的速度被拖慢了。可以自行尝试。

码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~