pyqt 批量ping一个网段 返回结果 的程序 (加了个界面 效果不理想)
2015-09-29 15:05
411 查看
qt生成的界面:
文件 ping_ui.py
主程序:
执行ping的时候由于同时创建了256个子进程,电脑会卡死十几秒 哈哈 无解。。。
文件 ping_ui.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'ping_ui.ui' # # Created: Tue Sep 29 14:36:22 2015 # by: PyQt4 UI code generator 4.11.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_Form(object): def setupUi(self, Form): Form.setObjectName(_fromUtf8("Form")) Form.resize(432, 663) self.lineEdit = QtGui.QLineEdit(Form) self.lineEdit.setGeometry(QtCore.QRect(30, 40, 151, 31)) self.lineEdit.setObjectName(_fromUtf8("lineEdit")) self.pushButton = QtGui.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(190, 40, 93, 28)) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.tableView = QtGui.QTableView(Form) self.tableView.setGeometry(QtCore.QRect(30, 80, 361, 561)) self.tableView.setObjectName(_fromUtf8("tableView")) self.btn_clear = QtGui.QPushButton(Form) self.btn_clear.setGeometry(QtCore.QRect(290, 40, 93, 28)) self.btn_clear.setObjectName(_fromUtf8("btn_clear")) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): Form.setWindowTitle(_translate("Form", "Form", None)) self.pushButton.setText(_translate("Form", "Ping", None)) self.btn_clear.setText(_translate("Form", "clear", None))
主程序:
import subprocess import threading import time import re import sys from ping_ui import Ui_Form from PyQt4 import QtGui, QtCore try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s ip_num = 20 list_ping_result = [] class PingThread(threading.Thread): global list_ping_result def __init__(self,m_widget,t_id,str_ip,sleep_time,g_list_p_r): threading.Thread.__init__(self) self.sleep_time = sleep_time self.str_ip = str_ip self.list_p_r = g_list_p_r self.m_widget = m_widget self.t_id = t_id def run(self): if self.sleep_time == 0: self.sleep_time = 0.5 time.sleep(self.sleep_time) ftp_sub = subprocess.Popen("ping %s -n 3" % self.str_ip, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) ret = ftp_sub.stdout.read() str_ret = ret.decode("gbk") ret_s = re.search("TTL",str_ret) if ret_s: list_ping_result.append(('ping ok',self.str_ip)) self.m_widget.model.setItem(self.t_id,0,QtGui.QStandardItem('ping ok')) self.m_widget.model.setItem(self.t_id,1,QtGui.QStandardItem(self.str_ip)) else: list_ping_result.append(('ping error',self.str_ip)) self.m_widget.model.setItem(self.t_id,0,QtGui.QStandardItem('ping error')) self.m_widget.model.setItem(self.t_id,1,QtGui.QStandardItem(self.str_ip)) self.m_widget.model.item(self.t_id,0).setForeground(QtGui.QColor(255,0,0)) self.m_widget.model.item(self.t_id,1).setForeground(QtGui.QColor(255,0,0)) class MainWidget(QtGui.QWidget): global list_ping_result def __init__(self, list_p_r,parent=None): super(MainWidget,self).__init__(parent=parent) self.init_ui() def init_ui(self): self.ui = Ui_Form() self.ui.setupUi(self) self.ui.lineEdit.setText("192.168.8.1") self.ui.pushButton.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"), self.slot_Pushbutton) self.ui.btn_clear.connect(self.ui.btn_clear,QtCore.SIGNAL("clicked()"), self.slot_btn_clear) self.model = QtGui.QStandardItemModel() self.model.setColumnCount(2) self.model.setHeaderData(0,1,_fromUtf8("结果")) self.model.setHeaderData(1,1,_fromUtf8("IP")) self.ui.tableView.setModel(self.model) self.ui.tableView.setColumnWidth(0,80) self.ui.tableView.setColumnWidth(1,120) def run(self): while True: time.sleep(1) print("run") def slot_Pushbutton(self): str_ip = self.ui.lineEdit.text() ret = re.search("\d*\.\d*\.\d*\.",str_ip) if not ret: print("error ip") return str_ip = ret.group() self.thread_id =[] for i in range(256): self.thread_id.append(0) self.thread_id[i] = PingThread(self,i,str_ip + "%d" % i, int(i/20),list_ping_result) self.thread_id[i].start() print(i,end='') def slot_btn_clear(self): self.model.removeRows(0,self.model.rowCount()) def slot_return_result(self): i = 0 while True: if i < len(list_ping_result): self.model.setItem(i,0,QtGui.QStandardItem(list_ping_result[i][0])) self.model.setItem(i,1,QtGui.QStandardItem(list_ping_result[i][1])) if list_ping_result[i][0] == "ping error": self.model.item(i,0).setForeground(QtGui.QColor(255,0,0)) self.model.item(i,1).setForeground(QtGui.QColor(255,0,0)) i+=1 else: break def cmp_s(toupe_str): str_val = toupe_str[1] ret_group = re.match("\d*",str_val[::-1]) str_ret = ret_group.group() return int(str_ret[::-1]) app = QtGui.QApplication(sys.argv) main_widget = MainWidget(list_ping_result) main_widget.show() app.exec_()
执行ping的时候由于同时创建了256个子进程,电脑会卡死十几秒 哈哈 无解。。。
相关文章推荐
- Qt5 +msvc13+ openmp
- qt 日志
- Qt中在QMAinWindow内添加layout出现问题
- Qt 5笔记
- Qt学习笔记(一)
- Qt 5笔记
- QT 手记
- Qt翻译问题msgid
- Cannot mix incompatible Qt library (version 0x40801) with this library (version 0x40804)
- pyqt4 遍历TableWidget
- QT的creator中图示
- 编译qt5
- QT如何设置应用程序的图标
- 【转】QT中QWidget、QDialog及QMainWindow的区别
- QT窗口最小化后,不显示任务栏图标
- vc编译qt的文
- qt创建使用动态链接库
- PyQt4 单击事件
- PyQt4初试
- Qt 对象树 <二>