目录
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_()
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_()
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("<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.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_()