от
Я прошу помочь запустить команду пинг в Windows без замораживания диалога. Следующий код будет работать ScannerDialog однако диалоговое окно зависает, когда команда ping выполняется. Я думаю, что лучший путь вперед состоит в том, чтобы построить вместе с классом Qthread над Scanner_Dialog объект, я не понимаю, как многопоточность работает с PYQT5. Я думаю, что я близко, но может кто-то исправить мой код, чтобы показать мне правильный путь, чтобы чего-нить в PYQt? Я пробовал запускать различные функции и создавать различные классы. Я пытался поставить класс на другой модуль, а затем вызвать этот модуль. программа работает пинг ниже, однако, диалог зависает ScannerDialog.py

import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtNetwork import QHostAddress
from PyQt5.QtCore import QRegExp, QThread
from PyQt5.QtGui import QRegExpValidator


class Scanner_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(254, 176)
        self.groupBox = QtWidgets.QGroupBox(Dialog)
        self.groupBox.setGeometry(QtCore.QRect(10, 10, 231, 151))
        self.groupBox.setObjectName("groupBox")
        self.widget = QtWidgets.QWidget(self.groupBox)
        self.widget.setGeometry(QtCore.QRect(20, 30, 199, 107))
        self.widget.setObjectName("widget")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.ip_label = QtWidgets.QLabel(self.widget)
        self.ip_label.setObjectName("ip_label")
        self.verticalLayout_2.addWidget(self.ip_label)
        self.ports_label = QtWidgets.QLabel(self.widget)
        self.ports_label.setObjectName("ports_label")
        self.verticalLayout_2.addWidget(self.ports_label)
        self.types_label = QtWidgets.QLabel(self.widget)
        self.types_label.setObjectName("types_label")
        self.verticalLayout_2.addWidget(self.types_label)
        self.horizontalLayout.addLayout(self.verticalLayout_2)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")


        self.Ip_address_lineEdit = QtWidgets.QLineEdit(self.widget)
        #validate an ip address
        ipRange = "(?:[0

Моя попытка ввожу код ниже, и мне нужно помочь исправить 

ScannerDialog.py


import os
import asyncio
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtNetwork import QHostAddress
from PyQt5.QtCore import QRegExp, QThread, pyqtSignal
from PyQt5.QtGui import QRegExpValidator


class RunThread(QThread):
    ping_value = pyqtSignal()

    def __init__(self, parent=None):
        super(RunThread, self).__init__(parent)
        self.ping = ping_start
        self.is_running = True

    def run(self):
        print('the ip address you will ping is: '   Scanner_Dialog.Ip_address_lineEdit.text())
        response = os.popen('ping '  Scanner_Dialog.Ip_address_lineEdit.text())
        for line in response.readlines():
            #self.sleep(0.1)
            print(line)


    def stop(self):
        self.is_running = False
        print('stopping thread...')
        self.terminate()

class Scanner_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(254, 176)
        self.groupBox = QtWidgets.QGroupBox(Dialog)
        self.groupBox.setGeometry(QtCore.QRect(10, 10, 231, 151))
        self.groupBox.setObjectName("groupBox")
        self.widget = QtWidgets.QWidget(self.groupBox)
        self.widget.setGeometry(QtCore.QRect(20, 30, 199, 107))
        self.widget.setObjectName("widget")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.ip_label = QtWidgets.QLabel(self.widget)
        self.ip_label.setObjectName("ip_label")
        self.verticalLayout_2.addWidget(self.ip_label)
        self.ports_label = QtWidgets.QLabel(self.widget)
        self.ports_label.setObjectName("ports_label")
        self.verticalLayout_2.addWidget(self.ports_label)
        self.types_label = QtWidgets.QLabel(self.widget)
        self.types_label.setObjectName("types_label")
        self.verticalLayout_2.addWidget(self.types_label)
        self.horizontalLayout.addLayout(self.verticalLayout_2)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")


        self.Ip_address_lineEdit = QtWidgets.QLineEdit(self.widget)
        #validate an ip address
        ipRange = "(?:[0

пользователь должен ввести IP-адрес и нажмите OK > тогда диалоговое окно следует закрыть и программа ping должны с помощью команды ping IP-адрес.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
...