PyQt5学习笔记--信号与槽、自定义信号、绑定槽函数、模拟发送网络测试

目录

1--button信号连接槽事件

2--自定义信号和绑定槽函数

3--模拟发送网络测试


1--button信号连接槽事件

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
    def init_ui(self):
        self.resize(500, 300)

        btn = QPushButton("Click me", self)
        btn.setGeometry(200, 200, 100, 50)
        btn.clicked.connect(self.click_my_btn)
    def click_my_btn(self, arg):
        print("Well Done !", arg)

if __name__ == "__main__":
    app = QApplication(sys.argv)  # 创建对象

    w = MyWindow()
    w.show()

    # 程序进行循环等待状态
    app.exec_()

PyQt5学习笔记--信号与槽、自定义信号、绑定槽函数、模拟发送网络测试_第1张图片

2--自定义信号和绑定槽函数

import sys
import time
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    # 创建自定义信号 (只能在类属性定义)
    my_signal = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.resize(300, 200)
        btn = QPushButton("detection", self)
        btn.setGeometry(100, 150, 100, 30)

        btn.clicked.connect(self.check)

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

    def my_slot(self, msg):
        print(msg)

    def check(self):
        for i, ip in enumerate(["192.172.1.%d" %x for x in range(1, 255)]):
            print("模拟,正在检查 %s 上的漏洞..." % ip)
            if i % 5 ==0:
                self.my_signal.emit("发现漏洞!!") # 这里相当于调用了my_slot函数
            else:
                self.my_signal.emit("正常!")

            time.sleep(0.01)


if __name__ == "__main__":
    app = QApplication(sys.argv)  # 创建对象

    w = MyWindow()
    w.show()

    # 程序进行循环等待状态
    app.exec_()

PyQt5学习笔记--信号与槽、自定义信号、绑定槽函数、模拟发送网络测试_第2张图片

3--模拟发送网络测试

import sys
import time

from PyQt5.QtCore import *
from PyQt5.QtWidgets 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(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("Detection", 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("
".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.172.1.%d" % x for x in range(1, 255)]): msg = "模拟,正在检查 %s 上的漏洞..." % ip if i % 5 == 0: self.my_signal.emit(msg + "发现漏洞!!") # 这里相当于调用了my_slot函数 else: self.my_signal.emit(msg + "正常!") time.sleep(0.01) if __name__ == "__main__": app = QApplication(sys.argv) # 创建对象 w = MyWindow() w.show() # 程序进行循环等待状态 app.exec_()

PyQt5学习笔记--信号与槽、自定义信号、绑定槽函数、模拟发送网络测试_第3张图片

 

你可能感兴趣的:(qt,学习,python)