gpt4 book ai didi

python - 如何在 PyQT 中制作实时更新的可编辑小部件

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:14 25 4
gpt4 key购买 nike

我正在尝试制作一个 GUI 来更新我在 PyQT4 中的系统。我想让它在 GUI 中实时运行所有命令,这样你就可以看到它的更新。我不确定要使用哪种类型的小部件。

这方面的一个例子就像 wget 在运行时如何具有下载的状态栏,将其输出放入一个小部件中。

我想您会使用子进程库来运行命令,然后以某种方式将输出定向到小部件的内容,但我完全不确定如何执行此操作。

非常感谢任何帮助。

最佳答案

我相信您可以使用一个简单的 QLabel 实例来完成这项任务。但是,如果您需要更精美的可视化效果,您也可以选择只读的 QTextEdit 等。

关于处理代码,如果你碰巧选择QProcess而不是python中的subprocess模块​​,你会写类似下面的代码。

从 PyQt4.QtCore 导入 QTimer、pyqtSignal、QProcess、pyqtSlot从 PyQt4.QtGui 导入 QLabel

class SystemUpdate(QProcess)
"""
A class used for handling the system update process
"""

def __init__(self):
_timer = QTimer()
_myDisplayWidget = QLabel()

self.buttonPressed.connect(self.handleReadyRead)
self.error.connect(self.handleError)
_timer.timeout.connect(self.handleTimeout)

_timer.start(5000)

@pyqtSlot()
def handleReadyRead(self):
_readData = readAll()
_myDisplayWidget.append(readData)

if not _timer.isActive():
_timer.start(5000)

@pyqtSlot()
def handleTimeout(self):
if not _readData:
_myDisplayWidget.append('No data was currently available for reading from the system update')
else:
_myDisplayWidget.append('Update successfully run')

@pyqtSlot(QProcess.ProcessError)
def handleError(self, processError)
if processError == QProcess.ReadError:
_myDisplayWidget.append('An I/O error occurred while reading the data, error: %s' % _process->errorString())

注意:我知道 QLabel 类没有附加方法,但您可以借助可用方法轻松编写这样一个方便的包装器。

至于完整性,这里采用 python 子进程方法:

import subprocess
from PyQt4.QtGui import QLabel

output = ""
try:
"""
Here you may need to pass the absolute path to the command
if that is not available in your PATH, although it should!
"""
output = subprocess.check_output(['command', 'arg1', 'arg2'], stderr=subprocess.STDOUT)
exception subprocess.CalledProcessError as e:
output = e.output
finally:
myDisplayWidget.append(output)

关于python - 如何在 PyQT 中制作实时更新的可编辑小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20855171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com