pyqt5自定义信号

该代码展示了如何使用PyQt5创建一个简单的窗口应用,模拟漏洞检测过程,并通过信号槽机制实时显示检测信息。

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)
        # print(self.msg.frameSize())
        self.msg.setWordWrap(True)  # 自动换行
        self.msg.setAlignment(Qt.AlignTop)  # 靠上
        # self.msg.setStyleSheet("background-color: yellow; color: black;")

        # 创建一个滚动对象
        scroll = QScrollArea()
        scroll.setWidget(self.msg)

        # 创建垂直布局器,用来添加自动滚动条
        v_layout = QVBoxLayout()
        v_layout.addWidget(scroll)

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

        # 操作将要显示的控件以及子布局器添加到container
        container.addLayout(v_layout)
        container.addLayout(h_layout)

        # 设置布局器
        self.setLayout(container)

        # 绑定信号和槽
        self.my_signal.connect(self.my_slot)

    def my_slot(self, msg):
        # 更新内容
        print(msg)
        self.msg_history.append(msg)
        self.msg.setText("<br>".join(self.msg_history))
        self.msg.resize(440, self.msg.frameSize().height() + 15)
        self.msg.repaint()  # 更新内容,如果不更新可能没有显示新内容

    def check(self):
        for i, ip in enumerate(["192.168.1.%d" % x for x in range(1, 255)]):
            msg = "模拟,正在检查 %s 上的漏洞...." % ip
            # print(msg)
            if i % 5 == 3:
                # 表示发射信号 对象.信号.发射(参数)
                self.my_signal.emit(msg + "【发现漏洞】")
            time.sleep(0.01)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = MyWindow()
    w.show()

    app.exec()

这段代码是一个基于 PyQt5 的简单程序,用于模拟漏洞检测过程。

首先,导入了必要的模块,包括 systimePyQt5.QtWidgetsPyQt5.QtCore。然后,定义了一个名为 MyWindow 的继承自 QWidget 的类,用于创建主窗口。

MyWindow 的构造函数中,初始化了界面布局,并创建了一个用于显示检测到的漏洞信息的标签 msg。通过创建一个滚动区域 scroll 并将标签放入其中,实现了自动滚动条的功能。然后,创建了一个垂直布局器 v_layout 和一个水平布局器 h_layout,用于添加控件和按钮。最后,将布局器添加到主窗口的整体布局器 container 中,并设置为窗口的布局。

my_slot 方法中,更新了漏洞信息展示的标签内容,并根据内容的高度调整标签的大小。使用 repaint() 方法更新内容的显示。

check 方法模拟了漏洞检测的过程。通过一个循环,对 IP 地址进行模拟检测,并在每次检测到漏洞时发出信号,并将相应的信息传递给槽函数 my_slot

main 函数中,创建了一个应用程序对象 app,然后创建了 MyWindow 对象,并显示它。最后,通过调用 app.exec() 进入应用程序的事件循环,直到应用程序退出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能教学实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值