[desarrollo de herramienta de interfaz pyqt5-10] señal personalizada + evento de activación

Tabla de contenido

El primer paso: la vinculación del evento desencadenante.

Paso 2: agregar código lógico + ranura


0x00 Prefacio:

ranura personalizada

Es necesario agregar nuevos módulos: desde PyQt5.QtCore importe pyqtSignal

Nota: No coloque señales personalizadas en una función personalizada



El primer paso: la vinculación del evento desencadenante.

1. De hecho, primero puede averiguar qué código lógico vincular al evento desencadenante (recomendado)

2. También puede escribir el código lógico primero y luego considerar vincularlo.

(lógica de enlace + ranura de enlace)

Es el evento que se desencadena y debe ejecutarse.

import sys
import time

from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication,  QPushButton, QDialog


class MainWindow(QDialog):

# ————————————————————————————————————————
# 自定义的信号

    # 声明一个信号,放在函数外面
    my_signal = pyqtSignal(str)

# ————————————————————————————————————————

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

    def init_ui(self):
        self.resize(500,400)
        btn = QPushButton("开始检测",self)
        btn.setGeometry(50,100,100,30)

# ————————————————————————————————————
# 绑定的点击事件(绑定逻辑+绑定槽)

        # 绑定按钮的点击事件(check函数)
        btn.clicked.connect(self.check)

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


# ————————————————————————————————————————————————



if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 根据命名自己改(我每个都以MainWindow就不改了)
    w = MainWindow()
    w.setWindowTitle("对话框")
    w.show()
    sys.exit(app.exec_())



Paso 2: agregar código lógico + ranura

Ranura perfecta (personalizada) + código lógico

import sys
import time

from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication,  QPushButton, QDialog


class MainWindow(QDialog):
    # 声明一个信号,放在函数外面
    my_signal = pyqtSignal(str)

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

    def init_ui(self):
        self.resize(500,400)
        btn = QPushButton("开始检测",self)
        btn.setGeometry(50,100,100,30)


        # 绑定按钮的点击事件(check函数)
        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.168.1.%d" % x for x in range(1,20)]):
            msg = "正在检测 %s 上的漏洞" % ip
            print(msg)
            # 漏洞的判断
            if i % 5 == 0:
                # 发射信号  对象.信号(参数)
                self.my_signal.emit(msg + "[存在漏洞]")
            # else:
            #     self.my_signal.emit("")
            time.sleep(0.1)

# ————————————————————————————————————————————————————————————————————————————


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 根据命名自己改(我每个都以MainWindow就不改了)
    w = MainWindow()
    w.setWindowTitle("对话框")
    w.show()
    sys.exit(app.exec_())

El resultado de la operación es el siguiente:

Supongo que te gusta

Origin blog.csdn.net/qq_53079406/article/details/132558573
Recomendado
Clasificación