Записать результат pingа в QLabel
Есть код:
import sys
from PyQt5.Qt import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
self.runButton = QPushButton('Start')
self.runButton.clicked.connect(self.callProgram)
self.textEdit = QTextEdit()
layout = QHBoxLayout(centralWidget)
layout.addWidget(self.textEdit)
layout.addWidget(self.runButton)
# Объект QProcess для внешнего приложения
self.process = QProcess(self)
# QProcess выдает `readyRead`, когда есть данные для чтения !!!
self.process.readyRead.connect(self.dataReady)
self.timer = QTimer(self, interval=5000) # установите нужный вам интервал
self.timer.timeout.connect(self.on_timeout)
def dataReady(self):
cursor = self.textEdit.textCursor()
cursor.movePosition(cursor.End)
cursor.insertText( self.process.readAll().data().decode("cp866") )
self.textEdit.ensureCursorVisible()
def on_timeout(self):
# запустить процесс
# `start` принимает exec и список аргументов
#self.process.start('ping', ['127.0.0.1'])
self.process.start('ping', ['ru.stackoverflow.com'])
def callProgram(self):
if self.runButton.text() == 'Start':
self.runButton.setText('Stop')
self.timer.start()
else:
self.timer.stop()
self.runButton.setText('Start')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.resize(600, 300)
w.show()
sys.exit(app.exec_())
Можно ли сделать вместо вывода содержимого в QtTextEdit просто указывать в QLabel если пинг есть то Подключен, если нет пинга Не подключен
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5.Qt import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
self.runButton = QPushButton('Start')
self.runButton.clicked.connect(self.callProgram)
self.label = QLabel()
layout = QVBoxLayout(centralWidget)
layout.addWidget(self.label, alignment=Qt.AlignCenter)
layout.addWidget(self.runButton)
self.process = QProcess(self)
# QProcess выдает `readyRead`, когда есть данные для чтения
# self.process.readyRead.connect(self.dataReady)
# https://doc.qt.io/qt-5/qprocess.html#finished
self.process.finished.connect(self.on_finished) # +++
# или так
# self.ipAddress = '151.101.129.69' # +++
# или так
self.ipAddress = 'ru.stackoverflow.com' # +++
self.timer = QTimer(self, interval=5000) # установите нужный вам интервал
self.timer.timeout.connect(self.on_timeout)
@pyqtSlot(int, QProcess.ExitStatus) # +++
def on_finished(self, exitCode, exitStatus): # +++
#print(f"exitCode=`{exitCode}`, exitStatus=`{exitStatus}`")
if exitCode == 0:
text = '<span style="color: green; font-size: 20px;">Подключен</span>'
else:
text = '<span style="color: red; font-size: 20px;">НЕ подключен</span>'
self.label.setText(f'Ping для {self.ipAddress}: {text}') # +++
self.label.adjustSize()
# def dataReady(self):
# cursor = self.textEdit.textCursor()
# cursor.movePosition(cursor.End)
# cursor.insertText( self.process.readAll().data().decode("cp866") )
# self.textEdit.ensureCursorVisible()
def on_timeout(self):
# запустить процесс
# `start` принимает exec и список аргументов
#self.process.start('ping', ['127.0.0.1'])
#self.process.start('ping', ['ru.stackoverflow.com', '-n', '2', '-w', '100'])
self.process.start('ping', [self.ipAddress, '-n', '2', '-w', '100'])
def callProgram(self):
if self.runButton.text() == 'Start':
self.runButton.setText('Stop')
self.timer.start()
else:
self.timer.stop()
self.runButton.setText('Start')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.resize(600, 300)
w.show()
sys.exit(app.exec_())

