import sys
import time
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
my_siganl=pyqtSignal(str)
def __init__(self):
super().__init__()
self.initui()
self.msg_history=list()#因为是自定义信号,所以要创建一个保存历史数据的列表
def initui(self):#UI的构成为,上面一个滚动的文本,下面一个按钮
self.resize(500,200)
'''首先创建一个滚动文本'''
container=QVBoxLayout()
self.msg=QLabel('111')
self.msg.resize(500,15)
self.msg.setWordWrap(True)#开启自动换行
self.msg.setAlignment(Qt.AlignTop)#alignment:翻译为对齐
#创建一个滚动对象
scroll=QScrollArea()
scroll.setWidget(self.msg)
#此处一定要创建一个布局器,将滚动对象添加到布局器中
vboxLayout=QVBoxLayout()
vboxLayout.addWidget(scroll)
#创建水平布局器
h_laylout=QHBoxLayout()
btn=QPushButton('开始检测',self)
btn.clicked.connect(self.check)
h_laylout.addWidget(btn)
#绑定信号和槽
self.my_siganl.connect(self.myslot)
container.addLayout(vboxLayout)
container.addLayout(h_laylout)
self.setLayout(container)
def myslot(self,msg):#此处的msg就是my_siganl中的字符串
print(msg)
self.msg_history.append(msg)
self.msg.setText('<br>'.join(self.msg_history))
self.msg.resize(400,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==3:
self.my_siganl.emit(msg.format('发现漏洞'))
time.sleep(0.01)
if __name__ == '__main__':
app=QApplication(sys.argv)
w=MyWindow()
w.show()
app.exec()
创建一个自定义信号demo
最新推荐文章于 2024-09-10 19:11:48 发布