PyQt5常用操作之信号与槽

案例3

# -*- coding = utf-8 -*-
# @Time : 2022/9/6 11:23
# @Author : Arthur
# @FileName : 信号与槽之综合练习.py
# @Software : Pycharm
import sys
import time

from PyQt5.QtCore import pyqtSignal, Qt
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel, QScrollArea, QHBoxLayout


class my_window(QWidget):
    # 声明一个信号 只能放在函数外面
    my_signal = pyqtSignal(str)

    def __init__(self):
        super(my_window, self).__init__()
        self.init_ui()
        self.msg_history = list()

    def init_ui(self):
        self.resize(600, 200)

        # 创建一个整体布局器
        container = QVBoxLayout()

        # 用来显示监测到的漏洞的信息
        self.msg = QLabel('')
        self.msg.resize(500, 15)
        self.msg.setWordWrap(True)  # 自动换行
        self.msg.setAlignment(Qt.AlignTop)  # 靠上

        # 创建一个滚动对象
        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()  # 伸缩器
        h_layout.addWidget(btn)  # 按钮在两个伸缩器之间居中
        h_layout.addStretch()  # 伸缩器

        # 操作将要显示的控件以及子布局器添加到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(500, 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
            if i % 5 == 0:
                # emit 表示发射信号 对象.信号.发射(参数)
                self.my_signal.emit(msg + '[发现漏洞]')
            time.sleep(0.01)


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

    app.exec_()
PyQt5常用操作之信号与槽

原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/pyqt5changyongcaozuozhixinhaoyucao/.html

(0)
打赏 微信扫一扫 微信扫一扫
朋远方的头像朋远方
上一篇 2022年9月6日 上午9:43
下一篇 2022年9月6日 下午4:19

相关推荐

发表回复

登录后才能评论