pyqt5信号与槽

在这里插入图片描述

信号与槽

信号与槽是Qt的核心内容,信号就是当程序触发了某种状态或者某种事件,则产生一个信号;槽则是一个设置捕捉信号的一个“装置”,当接收到了信号后执行某些特定的函数。

信号和槽之间的连接
简单操作如下

对象.信号.connect(槽函数)

本次做了一个模拟发送网络测试的信号和槽的案例,具体代码及注释如下

import sys
import time
from  PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
    my_signal = pyqtSignal(str)  #声明了一个信号,只能放在函数的外面
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.msg_history=list()  #用于存放消息
    def init_ui(self):
        self.resize(500,200)
        container = QVBoxLayout() #创建一个总体布局器
        self.msg=QLabel("")  #创建一个信息栏
        self.msg.resize(440,15)
        self.msg.setWordWrap(True)  #开启自动换行
       # self.msg.setAlignment()  #设置显示位置
        scroll=QScrollArea()  #创建一个滚动对象
        scroll.setWidget(self.msg)  #用于滚动msg
        v_layout=QVBoxLayout()  #创建垂直布局
        v_layout.addWidget(scroll)  #将滚动对象显示到v_layout中

        h_layout= QHBoxLayout()  #创建水平布局器
        btn=QPushButton('开始检测',self)  #创建按钮
        btn.clicked.connect(self.check)  #绑定按钮的点击,点击后则开始检测
        h_layout.addStretch(1)  #添加伸缩器
        h_layout.addWidget(btn)  #将按钮添加到水平布局中
        h_layout.addStretch(1)

        container.addLayout(v_layout)  #将控件和布局器添加到总窗口
        container.addLayout(h_layout)
        self.setLayout(container)
        self.my_signal.connect(self.my_solt)  #信号和槽绑定
    def my_solt(self,msg):
        print(msg)
        self.msg_history.append(msg)
        #将参数 msg 添加到对象(通常是某种用户界面元素)的msg_history列表中
        self.msg.setText("<br>".join(self.msg_history))
        #将每次接收到的信息换行显示
        self.msg.resize(440,self.msg.frameSize().height()+15)
        #高度设置为当前高度加上 15 像素,为了确保界面元素适应显示所有消息。
        self.msg.repaint()
        #重新生成页面内容
    def check(self):
        for i,ip in enumerate(["192.168.1.%d" % x for x in range(1,255)]):
            #用于遍历一个IP地址列表。这个列表包含从"192.168.1.1"到"192.168.1.254"的IP地址通过字符串格式化将数字 x 插入到 IP 地址中。
            #%d,它表示一个整数的占位符。
            msg="模拟,正在检查%s上的漏洞...."% ip
            #如果ip的值是"192.168.1.5"那么"模拟,正在检查%s上的漏洞...." % ip这个表达式将生成一个新的字符串,如下所示:”模拟,正在检查192.168.1.5上的漏洞...“
            if i % 5 ==0:
                self.my_signal.emit(msg+"发现漏洞")
            time.sleep(0.01)

if __name__=='__main__':
    app=QApplication(sys.argv)
    w=MyWindow()
    w.show()
    app.exec_()

运行结果如下
在这里插入图片描述

OK 也不知道我写清楚了没有

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值