如何在不关闭GUI窗口的情况下停止运行PyQt5程序?

用户名

以下代码可ping网站,并在QTextEdit中打印结果。一键“运行”用于启动ping。我想要另一个按钮“ End”,它可以在运行ping进程时停止它,而无需关闭GUI。但是当前,“结束”按钮关闭整个GUI窗口。您是否对如何停止ping但要保留GUI有任何想法,因此我可以通过按“运行”按钮再次启动ping。

import sys
from PyQt5 import QtCore,QtWidgets

class gui(QtWidgets.QMainWindow):
    def __init__(self):
        super(gui, self).__init__()
        self.initUI()

    def dataReady(self):
        cursor = self.output.textCursor()
        cursor.movePosition(cursor.End)
        cursor.insertText(str(self.process.readAll()))
        self.output.ensureCursorVisible()

    def callProgram(self):
        # run the process
        # `start` takes the exec and a list of arguments
        self.process.start('ping',['127.0.0.1'])

    def initUI(self):
        # Layout are better for placing widgets
        layout = QtWidgets.QHBoxLayout()
        self.runButton = QtWidgets.QPushButton('Run')
        self.runButton.clicked.connect(self.callProgram)
        self.runButton1 = QtWidgets.QPushButton('End')
        self.runButton1.clicked.connect(self.close)

        self.output = QtWidgets.QTextEdit()

        layout.addWidget(self.output)
        layout.addWidget(self.runButton)
        layout.addWidget(self.runButton1)

        centralWidget = QtWidgets.QWidget()
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)

        # QProcess object for external app
        self.process = QtCore.QProcess(self)
        # QProcess emits `readyRead` when there is data to be read
        self.process.readyRead.connect(self.dataReady)

        # Just to prevent accidentally running multiple times
        # Disable the button when process starts, and enable it when it finishes
        self.process.started.connect(lambda: self.runButton.setEnabled(False))
        self.process.finished.connect(lambda: self.runButton.setEnabled(True))


#Function Main Start
def main():
    app = QtWidgets.QApplication(sys.argv)
    ui=gui()
    ui.show()
    sys.exit(app.exec_())
#Function Main END

if __name__ == '__main__':
    main() 
永乐

您必须将clicked信号连接QProcess kill插槽:

def initUI(self):
    [...]
    self.runButton1 = QtWidgets.QPushButton('End')
    # self.runButton1.clicked.connect(self.close)
    [...]

    # QProcess object for external app
    self.process = QtCore.QProcess(self)
    # QProcess emits `readyRead` when there is data to be read
    self.process.readyRead.connect(self.dataReady)
    self.runButton1.clicked.connect(self.process.kill)
    # Just to prevent accidentally running multiple times
    # Disable the button when process starts, and enable it when it finishes
    self.process.started.connect(lambda: self.runButton.setEnabled(False))
    self.process.finished.connect(lambda: self.runButton.setEnabled(True))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PyQt - 如何在不关闭对话框窗口的情况下停止执行

如何在不关闭SAS的情况下停止它?

如何在不关注pyqt5 python的情况下显示工具提示?

如何在不关闭应用程序的情况下停止功能?

如何在不停止的情况下在 PyQt5 应用程序中运行生成器循环?

在不关闭 Tkinter 窗口的情况下退出 python 程序

如何在不冻结 GUI 的情况下在 PyQt5 中运行长任务?

如何在不关闭 Tkinter 中的整个应用程序的情况下关闭特定窗口?

如何在不关闭命令终端窗口的情况下终止“ Ping”?

如何在不关闭窗口的情况下进行网格更新

Kivy:如何在不关闭弹出窗口的情况下更新弹出标签文本

我如何在不关闭konsole窗口的情况下杀死ssh卡住的连接?

如何在不关闭Java GUI的情况下释放文件

如何让这个简单的程序在不关闭的情况下返回?

如何在不关闭正在运行的ssh / telnet会话的情况下退出shell脚本

如何在不关闭终端的情况下运行脚本?

如何在不关闭流的情况下从流量收集

如何在不关闭xterm的情况下捕获SIGINT?

如何在不关闭程序的情况下重新启动我的游戏

如何在不关闭主程序的情况下终止Firefox中的子进程

如何在不关闭主窗口的情况下关闭Tkinter中的单个窗口?

如何在没有QProcess的情况下将终端嵌入PyQt5应用程序?

在不关闭应用程序的情况下停止执行任何方法

如何在不关闭现有浏览器会话的情况下运行 UFT 自动化脚本?

如何在pyqt5中关闭窗口并终止程序?程序被卡住

如何在不关闭窗口的情况下关闭缓冲区?

Titanium Properties getString说:null,如何在不关闭应用程序的情况下显示该值?

如何在不停止进程的情况下正确关闭记事本++的窗口?

如何在不单击pyqt5中的按钮的情况下计算值?