PyQt5开发之路(3)— button控件和信号与槽
一、前言
信号(signal)和槽(slot)是Qt的核心机制,在创建事件循环之后,通过建立信号和槽的连接就可以实现对象之间的通信,当信号发射(emit)时,连接的槽函数将会自动执行。
参考视频:https://www.bilibili.com/video/BV1ot411d748?p=7
二、添加一个功能按键
首先,添加一个按键到ui界面:
然后点击【Edit】 -> 【Edit Signals/Slots】,
然后我们按住新加入的按键拖动,可以看到被拉出来一个信号,其默认连接主窗口
松开按键后,会出现一个信号和槽函数的选择界面,将下方的【Show signals and slots inherited from QWidget】勾选,左边的信号选择【clicked】即点击事件,右边的槽函数选择【close】即关闭窗口
保存,将其转换为py文件,
然后运行py程序,可以看到,在点击【exit】按键后,窗口关闭了,这是因为我们在点击【exit】按钮时会发射clicked信号,这个信号会被槽函数close()捕捉到,并触发该窗体的close行为。
三、自定义功能
刚才可以看到,有一些系统已经给定的功能,那么能不能实现自己想要的功能呢,例如,按下按键时,打印一个字符串。
首先,创建一个类,然后继承ui文件生成的类,如下所示,这样我们就可以在set_myUi函数中完成我们想要的设置
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: William
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import Button
class WindowClass(QMainWindow, Button.Ui_MainWindow):
def __init__(self):
super(WindowClass, self).__init__()
self.setupUi(self)
self.set_myUi()
def set_myUi(self):
pass
def main():
print("Hello world, I am William. ")
# 1、创建QApplication类的实例对象
app = QApplication(sys.argv)
# 2、创建一个WindowClass实例对象
myMainWindow = WindowClass()
# 3、显示主窗口
myMainWindow.show()
# 4、进入程序的主循环、并通过exit函数确保主循环安全结束
sys.exit(app.exec_())
if __name__ == '__main__':
main()
然后我们查看一下我们要操作的那个按钮的objectName,可以看到,为pushButton_2
这样我们就可以设置其点击事件的槽函数
def set_myUi(self):
self.pushButton_2.clicked.connect(self.pushButton_2_print)
def pushButton_2_print(self):
print("PushButton 2 has pressed!")
运行程序,点击【exit】按键,可以看到打印出来的字符串
四、显示点击次数
我们之前说过,Label控件是做显示作用的,那我们可以用它来显示我们的点击次数,添加一个Label控件在窗口中,将其文本显示修改为“这是第0次点击”,接着找到该控件的objectName,可以看到,为lable
,这样我们就可以在函数中添加setText()
函数,
编写代码如下所示,
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: William
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import Button
class WindowClass(QMainWindow, Button.Ui_MainWindow):
def __init__(self):
super(WindowClass, self).__init__()
self.cnt = 0
self.setupUi(self)
self.set_myUi()
def set_myUi(self):
self.pushButton.clicked.connect(self.pushButton_print)
def pushButton_print(self):
print("PushButton 2 has pressed!")
self.cnt = self.cnt + 1
self.label.setText("这是第%d次点击"%self.cnt)
def main():
print("Hello world, I am William. ")
# 1、创建QApplication类的实例对象
app = QApplication(sys.argv)
# 2、创建一个WindowClass实例对象
myMainWindow = WindowClass()
# 3、显示主窗口
myMainWindow.show()
# 4、进入程序的主循环、并通过exit函数确保主循环安全结束
sys.exit(app.exec_())
if __name__ == '__main__':
main()
运行程序,点击button按键,可以看到显示出来的点击次数
五、附录