如何将测试输出打印到pyqt gui中的标签上

问题描述 投票:0回答:1

我正在尝试使用python脚本做什么:使用pytest测试方法将文本行打印到pyqt GUI中的标签上。

运行主python文件时,将启动GUI,单击“测试”按钮即可运行测试,而不会阻止GUI(请参见下面的完整代码示例)。但是我不知道现在如何进行。

代码:

import sys

import pytest
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget


class Window(QtWidgets.QMainWindow):
    signal_start_background_job = QtCore.pyqtSignal()

    def __init__(self):
        super(Window, self).__init__()

        layout = QVBoxLayout()
        self.button = QtWidgets.QPushButton("test", self)
        self.label = QtWidgets.QLabel("console output")
        layout.addWidget(self.button)
        layout.addWidget(self.label)
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.worker = WorkerObject()
        self.thread = QtCore.QThread()
        self.worker.moveToThread(self.thread)

        self.signal_start_background_job.connect(self.worker.background_job)
        self.button.clicked.connect(self.start_background_job)

    def start_background_job(self):
        self.thread.start()
        self.signal_start_background_job.emit()


class WorkerObject(QtCore.QObject):
    @QtCore.pyqtSlot()
    def background_job(self):
        pytest.main(["-s", "-k test_something"])


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())


def test_something():
    print("unit test some stuff")
    assert 0 == 0
python pyqt
1个回答
0
投票

我认为您需要检出sys.stdout,并将其路由到io对象,然后可以将其路由到小部件中的标签。然后,我将设置一个计时器,并每隔0.1秒左右将标签文本设置为该对象。另外,您也可以实现一个小部件来捕获qt中的stdout文本,例如:https://stackoverflow.com/a/1220002/6615517我没有尝试过,但是对该问题的其他答案应该有所帮助。您可能需要清除每个测试上的标签,以防止其过长。

© www.soinside.com 2019 - 2024. All rights reserved.