PyQt5开发之路(3)— button控件和信号与槽

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()函数,
PyQt5开发之路(3)— button控件和信号与槽_第1张图片
编写代码如下所示,

 #!/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按键,可以看到显示出来的点击次数
PyQt5开发之路(3)— button控件和信号与槽_第2张图片

五、附录

上一篇:PyQt5开发之路(2)— Label控件和布局管理
下一篇:

你可能感兴趣的:(Python学习)