qthread: destroyed while thread is still running как исправить?
Как устранить данную ошибку ?
Main.py
import sys
import os
import sqlite3
import asyncio
import platform
from des import *
import subprocess
from PyQt5.Qt import *
from Main_setings_ip import *
from PyQt5 import QtCore, QtGui, QtWidgets
#----------------------------------------------- 1 пинг
class WorkThread(QtCore.QThread):
threadSignal = QtCore.pyqtSignal(int, str, tuple)
def __init__(self, dictIP):
super().__init__()
self.dictIP = dictIP
def run(self):
while True:
for k, v in self.dictIP.items():
if v[2] == 0:
response = subprocess.run(["ping", k, "-n", "1", "-w", "100"], shell=True,stdout=subprocess.PIPE)
response = response.returncode
self.msleep(1)
self.threadSignal.emit(response, k, v)
# self.finished.emit()
#----------------------------------------------- 2 пинг
class WorkThread_1(QtCore.QThread):
threadSignal_1 = QtCore.pyqtSignal(int, str, tuple)
def __init__(self, k, v):
super().__init__()
self.k_1 = k
self.v_1 = v
def run(self):
response_1 = subprocess.run(["ping", self.k_1, "-n", "4", "-w", "100"], shell=True,stdout=subprocess.PIPE)
response_1 = response_1.returncode
self.msleep(1)
self.threadSignal_1.emit(response_1, self.k_1, self.v_1)
#------------------------------------------------
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.startThread)
self.ui.pushButton_2.clicked.connect(self.clear_plainText)
self.thread = None
self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
self.ui.tableWidget.horizontalHeader().setMinimumSectionSize(0)
self.ui.plainTextEdit.setReadOnly(True)
self.row_count = 1
self.tab()
def tab(self):
# Подключение к БД
sqlite_connection = sqlite3.connect("New.db")
cursor = sqlite_connection.cursor()
sqlite_select_query = """SELECT ip FROM ips"""
cursor.execute(sqlite_select_query)
records = cursor.fetchall()
cursor.close()
sqlite_connection.close()
# Перебор ip адресов
for row, value in enumerate(records):
self.ui.tableWidget.setRowCount(self.row_count)
item = QtWidgets.QTableWidgetItem(str(value[0]))
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)
self.ui.tableWidget.setItem(row, 0, item)
self.row_count += 1
def clear_plainText(self):
self.ui.plainTextEdit.clear()
def startThread(self):
dictIP = {}
for row in range(self.ui.tableWidget.rowCount()):
item = self.ui.tableWidget.item(row, 0)
if not item.checkState():
item.setBackground(QtGui.QColor("white"))
dictIP[item.text()] = (row, 0, item.checkState())
if self.thread is None:
self.thread = WorkThread(dictIP)
self.thread.threadSignal.connect(self.on_threadSignal)
# self.thread.finished.connect(self.threadFinished)
self.thread.start()
self.ui.pushButton.setText("Stop thread")
style_stop = """QPushButton {
background-color: #fa7f72;
}
QPushButton:hover {
background-color: white;
}
QPushButton:pressed {
color: #626AB0;
background-color: #D5D4D4;
}"""
self.ui.pushButton.setStyleSheet(style_stop)
else:
self.thread.terminate()
self.thread = None
self.ui.pushButton.setText("Start thread")
style_start = """QPushButton {
background-color: #54e346;
}
QPushButton:hover {
background-color: white;
}
QPushButton:pressed {
color: #626AB0;
background-color: #D5D4D4;
}"""
self.ui.pushButton.setStyleSheet(style_start)
#----------------------------------------------- условия
def on_threadSignal(self, response, k, v):
#print(response, k, v)
item = self.ui.tableWidget.item(v[0], v[1])
#item.setCheckState(QtCore.Qt.Checked)
if response == 1:
self.thread_1 = WorkThread_1(k, v)
self.thread_1.threadSignal_1.connect(self.on_threadSignal_1)
self.thread_1.start()
else:
item.setBackground(QtGui.QColor("#54e346"))
def on_threadSignal_1(self, response_1, k_1, v_1):
#print(response_1, k_1, v_1)
item_1 = self.ui.tableWidget.item(v_1[0], v_1[1])
#item_1.setCheckState(QtCore.Qt.Checked)
if response_1:
item_1.setBackground(QtGui.QColor("#fa7f72"))
sqlite_connection = sqlite3.connect("New.db")
cursor = sqlite_connection.cursor()
sqlite_select_query = """SELECT * FROM ips WHERE ip = '{}'""".format(k_1)
cursor.execute(sqlite_select_query)
records = cursor.fetchall()
# Вставляем данные в PlainText
self.ui.plainTextEdit.setReadOnly(False)
for row in records:
self.ui.plainTextEdit.appendPlainText(str(row[4]) + " | " + str(row[1]) + " | " + str(row[2]) + "\n" +
str(row[3]) + "\n")
self.ui.plainTextEdit.setReadOnly(True)
else:
item_1.setBackground(QtGui.QColor("#ffaa00"))
#-----------------------------------------------
# def threadFinished(self):
# self.thread = None
# self.ui.pushButton.setText("Start thread")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
des.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(715, 469)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/ico/Python.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
MainWindow.setStyleSheet("background-color:#b2b2b2;")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setStyleSheet("background-color: #b2b2b2;")
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setToolTip("")
self.tab_2.setObjectName("tab_2")
self.gridLayout = QtWidgets.QGridLayout(self.tab_2)
self.gridLayout.setObjectName("gridLayout")
spacerItem = QtWidgets.QSpacerItem(153, 243, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 4, 2, 2, 1)
spacerItem1 = QtWidgets.QSpacerItem(54, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 2, 3, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem2, 5, 3, 1, 1)
self.pushButton_3 = QtWidgets.QPushButton(self.tab_2)
self.pushButton_3.setMinimumSize(QtCore.QSize(0, 31))
self.pushButton_3.setMaximumSize(QtCore.QSize(136, 31))
self.pushButton_3.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_3.setStyleSheet("QPushButton {\n"
" background-color: #FFAA00;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_3.setObjectName("pushButton_3")
self.gridLayout.addWidget(self.pushButton_3, 0, 1, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(75, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem3, 0, 3, 1, 1)
self.tableWidget = QtWidgets.QTableWidget(self.tab_2)
self.tableWidget.setMaximumSize(QtCore.QSize(136, 16777215))
self.tableWidget.setStyleSheet("background-color: #b2b2b2;")
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(1)
self.tableWidget.setRowCount(1)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
self.gridLayout.addWidget(self.tableWidget, 1, 1, 5, 1)
self.pushButton = QtWidgets.QPushButton(self.tab_2)
self.pushButton.setMinimumSize(QtCore.QSize(133, 31))
self.pushButton.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton.setStyleSheet("QPushButton {\n"
" background-color: #54e346;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton.setObjectName("pushButton")
self.gridLayout.addWidget(self.pushButton, 0, 2, 1, 1)
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.tab_2)
self.plainTextEdit.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ForbiddenCursor))
self.plainTextEdit.setObjectName("plainTextEdit")
self.gridLayout.addWidget(self.plainTextEdit, 0, 0, 6, 1)
self.pushButton_2 = QtWidgets.QPushButton(self.tab_2)
self.pushButton_2.setMinimumSize(QtCore.QSize(0, 31))
self.pushButton_2.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton_2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_2.setStyleSheet("QPushButton {\n"
" background-color: #00b8ef;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout.addWidget(self.pushButton_2, 1, 2, 1, 1)
self.pushButton_5 = QtWidgets.QPushButton(self.tab_2)
self.pushButton_5.setMinimumSize(QtCore.QSize(0, 31))
self.pushButton_5.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton_5.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_5.setStyleSheet("QPushButton {\n"
" background-color: #00b8ef;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_5.setObjectName("pushButton_5")
self.gridLayout.addWidget(self.pushButton_5, 2, 2, 1, 1)
self.tabWidget.addTab(self.tab_2, "")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_3)
self.gridLayout_2.setObjectName("gridLayout_2")
self.label = QtWidgets.QLabel(self.tab_3)
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(False)
font.setWeight(50)
self.label.setFont(font)
self.label.setObjectName("label")
self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
self.label_2 = QtWidgets.QLabel(self.tab_3)
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(False)
font.setWeight(50)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.gridLayout_2.addWidget(self.label_2, 0, 2, 1, 1)
spacerItem4 = QtWidgets.QSpacerItem(285, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem4, 0, 4, 1, 1)
self.comboBox = QtWidgets.QComboBox(self.tab_3)
self.comboBox.setMinimumSize(QtCore.QSize(161, 31))
self.comboBox.setObjectName("comboBox")
self.gridLayout_2.addWidget(self.comboBox, 1, 0, 1, 2)
self.comboBox_2 = QtWidgets.QComboBox(self.tab_3)
self.comboBox_2.setMinimumSize(QtCore.QSize(69, 31))
self.comboBox_2.setObjectName("comboBox_2")
self.gridLayout_2.addWidget(self.comboBox_2, 1, 2, 1, 1)
self.pushButton_4 = QtWidgets.QPushButton(self.tab_3)
self.pushButton_4.setMinimumSize(QtCore.QSize(133, 31))
self.pushButton_4.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton_4.setStyleSheet("QPushButton {\n"
" background-color: #54e346;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_4.setObjectName("pushButton_4")
self.gridLayout_2.addWidget(self.pushButton_4, 1, 3, 1, 1)
spacerItem5 = QtWidgets.QSpacerItem(285, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem5, 1, 4, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(20, 297, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem6, 2, 1, 1, 1)
self.tabWidget.addTab(self.tab_3, "")
self.verticalLayout.addWidget(self.tabWidget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 715, 21))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.action123 = QtWidgets.QAction(MainWindow)
self.action123.setObjectName("action123")
self.action123_2 = QtWidgets.QAction(MainWindow)
self.action123_2.setObjectName("action123_2")
self.menu.addAction(self.action123)
self.menu.addAction(self.action123_2)
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Мониторинг"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Мониторинг"))
self.pushButton_3.setToolTip(_translate("MainWindow", "Изменение ip и данных"))
self.pushButton_3.setText(_translate("MainWindow", "Настройка ip"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "ip"))
self.pushButton.setToolTip(_translate("MainWindow", "Пинг старт/стоп"))
self.pushButton.setText(_translate("MainWindow", "Start"))
self.plainTextEdit.setToolTip(_translate("MainWindow", "Лог панель"))
self.pushButton_2.setToolTip(_translate("MainWindow", "Отчистить поле лог панели"))
self.pushButton_2.setText(_translate("MainWindow", "Clear"))
self.pushButton_5.setToolTip(_translate("MainWindow", "Обновить таблицу"))
self.pushButton_5.setText(_translate("MainWindow", "Updae"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Пинг ip"))
self.label.setText(_translate("MainWindow", "ip аддреса"))
self.label_2.setText(_translate("MainWindow", "Порты"))
self.pushButton_4.setText(_translate("MainWindow", "Подключиться"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Мониторинг"))
self.menu.setTitle(_translate("MainWindow", "до"))
self.action123.setText(_translate("MainWindow", "123"))
self.action123_2.setText(_translate("MainWindow", "123"))
import res_rc
Шаблон бд
import sqlite3
# Добавление данных в таблицы
try:
connect = sqlite3.connect("New.db")
cursor = connect.cursor()
print("База данных подключена к SQLite")
cursor.execute("""CREATE TABLE IF NOT EXISTS ips(
ip INTEGER,
Gor TEXT,
Yi TEXT,
Location TEXT);""")
connect.commit()
records = [[f"192.168.{i}.9", "None", "None", "None"] for i in range(1, 101)]
cursor.executemany("INSERT INTO ips VALUES (?, ?, ?, ?)", records)
connect.commit()
print("Запись успешно добавлена")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if connect:
connect.close()
print("Соединение с SQLite закрыто")
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не совсем понимаю вашу логику и как вы синхронизируете
работу экземпляров класса WorkThread_1.
Я создал список, в который помещаю объекты thread_1 и проблема как бы ушла, попробуйте:
import sys
import os
import sqlite3
import asyncio
import platform
import subprocess
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
#from Main_setings_ip import *
#from des import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(715, 469)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/ico/Python.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
MainWindow.setStyleSheet("background-color:#b2b2b2;")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setStyleSheet("background-color: #b2b2b2;")
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setToolTip("")
self.tab_2.setObjectName("tab_2")
self.gridLayout = QtWidgets.QGridLayout(self.tab_2)
self.gridLayout.setObjectName("gridLayout")
spacerItem = QtWidgets.QSpacerItem(153, 243, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 4, 2, 2, 1)
spacerItem1 = QtWidgets.QSpacerItem(54, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 2, 3, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem2, 5, 3, 1, 1)
self.pushButton_3 = QtWidgets.QPushButton(self.tab_2)
self.pushButton_3.setMinimumSize(QtCore.QSize(0, 31))
self.pushButton_3.setMaximumSize(QtCore.QSize(136, 31))
self.pushButton_3.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_3.setStyleSheet("QPushButton {\n"
" background-color: #FFAA00;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_3.setObjectName("pushButton_3")
self.gridLayout.addWidget(self.pushButton_3, 0, 1, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(75, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem3, 0, 3, 1, 1)
self.tableWidget = QtWidgets.QTableWidget(self.tab_2)
self.tableWidget.setMaximumSize(QtCore.QSize(136, 16777215))
self.tableWidget.setStyleSheet("background-color: #b2b2b2;")
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(1)
self.tableWidget.setRowCount(1)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
self.gridLayout.addWidget(self.tableWidget, 1, 1, 5, 1)
self.pushButton = QtWidgets.QPushButton(self.tab_2)
self.pushButton.setMinimumSize(QtCore.QSize(133, 31))
self.pushButton.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton.setStyleSheet("QPushButton {\n"
" background-color: #54e346;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton.setObjectName("pushButton")
self.gridLayout.addWidget(self.pushButton, 0, 2, 1, 1)
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.tab_2)
self.plainTextEdit.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ForbiddenCursor))
self.plainTextEdit.setObjectName("plainTextEdit")
self.gridLayout.addWidget(self.plainTextEdit, 0, 0, 6, 1)
self.pushButton_2 = QtWidgets.QPushButton(self.tab_2)
self.pushButton_2.setMinimumSize(QtCore.QSize(0, 31))
self.pushButton_2.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton_2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_2.setStyleSheet("QPushButton {\n"
" background-color: #00b8ef;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout.addWidget(self.pushButton_2, 1, 2, 1, 1)
self.pushButton_5 = QtWidgets.QPushButton(self.tab_2)
self.pushButton_5.setMinimumSize(QtCore.QSize(0, 31))
self.pushButton_5.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton_5.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_5.setStyleSheet("QPushButton {\n"
" background-color: #00b8ef;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_5.setObjectName("pushButton_5")
self.gridLayout.addWidget(self.pushButton_5, 2, 2, 1, 1)
self.tabWidget.addTab(self.tab_2, "")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_3)
self.gridLayout_2.setObjectName("gridLayout_2")
self.label = QtWidgets.QLabel(self.tab_3)
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(False)
font.setWeight(50)
self.label.setFont(font)
self.label.setObjectName("label")
self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
self.label_2 = QtWidgets.QLabel(self.tab_3)
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(False)
font.setWeight(50)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.gridLayout_2.addWidget(self.label_2, 0, 2, 1, 1)
spacerItem4 = QtWidgets.QSpacerItem(285, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem4, 0, 4, 1, 1)
self.comboBox = QtWidgets.QComboBox(self.tab_3)
self.comboBox.setMinimumSize(QtCore.QSize(161, 31))
self.comboBox.setObjectName("comboBox")
self.gridLayout_2.addWidget(self.comboBox, 1, 0, 1, 2)
self.comboBox_2 = QtWidgets.QComboBox(self.tab_3)
self.comboBox_2.setMinimumSize(QtCore.QSize(69, 31))
self.comboBox_2.setObjectName("comboBox_2")
self.gridLayout_2.addWidget(self.comboBox_2, 1, 2, 1, 1)
self.pushButton_4 = QtWidgets.QPushButton(self.tab_3)
self.pushButton_4.setMinimumSize(QtCore.QSize(133, 31))
self.pushButton_4.setMaximumSize(QtCore.QSize(133, 31))
self.pushButton_4.setStyleSheet("QPushButton {\n"
" background-color: #54e346;\n"
"}\n"
"QPushButton:hover {\n"
" background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
" color: #626AB0;\n"
" background-color: #D5D4D4;\n"
"}")
self.pushButton_4.setObjectName("pushButton_4")
self.gridLayout_2.addWidget(self.pushButton_4, 1, 3, 1, 1)
spacerItem5 = QtWidgets.QSpacerItem(285, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem5, 1, 4, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(20, 297, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem6, 2, 1, 1, 1)
self.tabWidget.addTab(self.tab_3, "")
self.verticalLayout.addWidget(self.tabWidget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 715, 21))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.action123 = QtWidgets.QAction(MainWindow)
self.action123.setObjectName("action123")
self.action123_2 = QtWidgets.QAction(MainWindow)
self.action123_2.setObjectName("action123_2")
self.menu.addAction(self.action123)
self.menu.addAction(self.action123_2)
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Мониторинг"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Мониторинг"))
self.pushButton_3.setToolTip(_translate("MainWindow", "Изменение ip и данных"))
self.pushButton_3.setText(_translate("MainWindow", "Настройка ip"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "ip"))
self.pushButton.setToolTip(_translate("MainWindow", "Пинг старт/стоп"))
self.pushButton.setText(_translate("MainWindow", "Start"))
self.plainTextEdit.setToolTip(_translate("MainWindow", "Лог панель"))
self.pushButton_2.setToolTip(_translate("MainWindow", "Отчистить поле лог панели"))
self.pushButton_2.setText(_translate("MainWindow", "Clear"))
self.pushButton_5.setToolTip(_translate("MainWindow", "Обновить таблицу"))
self.pushButton_5.setText(_translate("MainWindow", "Updae"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Пинг ip"))
self.label.setText(_translate("MainWindow", "ip аддреса"))
self.label_2.setText(_translate("MainWindow", "Порты"))
self.pushButton_4.setText(_translate("MainWindow", "Подключиться"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Мониторинг"))
self.menu.setTitle(_translate("MainWindow", "до"))
self.action123.setText(_translate("MainWindow", "123"))
self.action123_2.setText(_translate("MainWindow", "123"))
#import res_rc
#-------------------------------------------- 1 пинг
class WorkThread(QtCore.QThread):
threadSignal = QtCore.pyqtSignal(int, str, tuple)
def __init__(self, dictIP):
super().__init__()
self.dictIP = dictIP
def run(self):
while True:
for k, v in self.dictIP.items():
if v[2] == 0:
response = subprocess.run(["ping", k, "-n", "1", "-w", "100"], shell=True,stdout=subprocess.PIPE)
response = response.returncode
self.msleep(1)
self.threadSignal.emit(response, k, v)
# self.finished.emit()
#----------------------------------------------- 2 пинг
class WorkThread_1(QtCore.QThread):
threadSignal_1 = QtCore.pyqtSignal(int, str, tuple)
def __init__(self, k, v):
super().__init__()
self.k_1 = k
self.v_1 = v
def run(self):
response_1 = subprocess.run(["ping", self.k_1, "-n", "4", "-w", "100"], shell=True,stdout=subprocess.PIPE)
response_1 = response_1.returncode
self.msleep(1)
self.threadSignal_1.emit(response_1, self.k_1, self.v_1)
#------------------------------------------------
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.startThread)
self.ui.pushButton_2.clicked.connect(self.clear_plainText)
self.thread = None
self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
self.ui.tableWidget.horizontalHeader().setMinimumSectionSize(0)
self.ui.plainTextEdit.setReadOnly(True)
self.row_count = 1
self.tab()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.thread_1_list = []
self.thread_1_num = 0
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def tab(self):
# Подключение к БД
sqlite_connection = sqlite3.connect("New.db")
cursor = sqlite_connection.cursor()
sqlite_select_query = """SELECT ip FROM ips"""
cursor.execute(sqlite_select_query)
records = cursor.fetchall()
cursor.close()
sqlite_connection.close()
# Перебор ip адресов
for row, value in enumerate(records):
self.ui.tableWidget.setRowCount(self.row_count)
item = QtWidgets.QTableWidgetItem(str(value[0]))
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)
self.ui.tableWidget.setItem(row, 0, item)
self.row_count += 1
def clear_plainText(self):
self.ui.plainTextEdit.clear()
def startThread(self):
dictIP = {}
for row in range(self.ui.tableWidget.rowCount()):
item = self.ui.tableWidget.item(row, 0)
if not item.checkState():
item.setBackground(QtGui.QColor("white"))
dictIP[item.text()] = (row, 0, item.checkState())
if self.thread is None:
self.thread = WorkThread(dictIP)
self.thread.threadSignal.connect(self.on_threadSignal)
# self.thread.finished.connect(self.threadFinished)
self.thread.start()
self.ui.pushButton.setText("Stop thread")
style_stop = """QPushButton {
background-color: #fa7f72;
}
QPushButton:hover {
background-color: white;
}
QPushButton:pressed {
color: #626AB0;
background-color: #D5D4D4;
}"""
self.ui.pushButton.setStyleSheet(style_stop)
else:
self.thread.terminate()
self.thread = None
self.ui.pushButton.setText("Start thread")
style_start = """QPushButton {
background-color: #54e346;
}
QPushButton:hover {
background-color: white;
}
QPushButton:pressed {
color: #626AB0;
background-color: #D5D4D4;
}"""
self.ui.pushButton.setStyleSheet(style_start)
#----------------------------------------------- условия
def on_threadSignal(self, response, k, v):
#print(response, k, v)
item = self.ui.tableWidget.item(v[0], v[1])
#item.setCheckState(QtCore.Qt.Checked)
if response == 1:
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
'''
self.thread_1 = WorkThread_1(k, v)
self.thread_1.threadSignal_1.connect(self.on_threadSignal_1)
self.thread_1.start()
'''
thread_1 = WorkThread_1(k, v)
self.thread_1_list.append(thread_1)
self.thread_1_list[self.thread_1_num].threadSignal_1.connect(self.on_threadSignal_1)
self.thread_1_list[self.thread_1_num].start()
self.thread_1_num += 1
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
else:
item.setBackground(QtGui.QColor("#54e346"))
def on_threadSignal_1(self, response_1, k_1, v_1):
#print(response_1, k_1, v_1)
item_1 = self.ui.tableWidget.item(v_1[0], v_1[1])
#item_1.setCheckState(QtCore.Qt.Checked)
if response_1:
item_1.setBackground(QtGui.QColor("#fa7f72"))
sqlite_connection = sqlite3.connect("New.db")
cursor = sqlite_connection.cursor()
sqlite_select_query = """SELECT * FROM ips WHERE ip = '{}'""".format(k_1)
cursor.execute(sqlite_select_query)
records = cursor.fetchall()
# Вставляем данные в PlainText
# ? self.ui.plainTextEdit.setReadOnly(False)
for row in records:
# ? IndexError: tuple index out of range
# ? ------------------------------------------------------> 4 <---- ?????????????????????
# self.ui.plainTextEdit.appendPlainText(str(row[4]) + " | " + str(row[1]) + " | " + str(row[2]) + "\n" +
# str(row[3]) + "\n")
self.ui.plainTextEdit.appendPlainText(
f'{row[0]} | {row[1]} | {row[2]}\n{row[3]}\n') # +++
# ? self.ui.plainTextEdit.setReadOnly(True)
else:
item_1.setBackground(QtGui.QColor("#ffaa00"))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())