gpt4 book ai didi

python - Qt Designer实时显示python脚本的输出

转载 作者:行者123 更新时间:2023-12-03 13:09:16 31 4
gpt4 key购买 nike

我正在尝试编写一个应用程序时遇到一些问题,因此我将首先给出所有交互的“大图”描述:

我有一个用Qt Designer编写的简单UI。这将启动一系列python脚本,它们对某些文件进行不同类型的操作。通过打印将所有操作通知给用户,但这是在命令行中发生的。
到目前为止,所有工作都根据需要/预期进行。

重要说明:有时需要用户输入:值或只是“按任意键”类型的事情。再次,按预期在cmd行中工作。

现在,我要做的就是将cmd行中来自python脚本的所有信息添加到Qt Designer UI中。

什么有效:
我能够获取python执行的输出并将其显示在textEdit对象中

什么不起作用:
UI仅在执行结束时更新,并且在脚本执行正在进行时不响应

我想让ui逐行更新,因为文本进来了,而不是成批的。

我该怎么做:

class my_ui(QtWidgets.QMainWindow):
...
def button_pressed
self.__process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
while self.__process.poll() is None:
line = self.__process.stdout.readline()
print(line)

def main(self):
...
self.console_output_to_ui()

def write(self, text):
self.ui.textEdit.append(text)

def console_output_to_ui(self):
sys.stdout = self

现在我抓取的输出看起来像这样:
....
b"evaluate_condition(): '4'\r\n"
# time delay 1s
b"evaluate_condition(): '5'\r\n"
# time delay 1s
b"evaluate_condition(): '6'\r\n"
....

暂时忽略格式错误,我想
  • 使该日志逐行显示,就像在Qt Designer用户界面中的python中的cmd/debug中实时显示一样,而不会阻止/锁定用户界面。
  • 找到了一种将参数/输入值传递给执行过程的方法。我想我可能也需要定义stdin,但是我不知道如何将其从QtDesigner传递给过程。

  • 谢谢!

    最佳答案

    好吧,对于任何人在这里环顾四周,第一个问题就解决了。
    如何:

    删除了sys.stdout highjack并用线程write替换了它(还删除了不需要的write函数,与console_output_to_ui及其调用相同):

    self.__process = subprocess.Popen(cmd, stdout=PIPE,  universal_newlines=True, shell=False)
    t = Thread(target=self.thread_read)
    t.start()


    def thread_read(self):
    while self.__process.poll() is None:
    line = self.__process.stdout.readline()
    temp = line.lstrip()
    temp = temp.replace("\n", "")
    # don't print empty lines
    if len(temp) > 1:
    self.ui.textEdit.append(temp)

    这样在ui textEdit中,我有一个看起来像这样的日志:
    evaluate_condition(): '6'
    evaluate_condition(): '7'
    evaluate_condition(): '8'
    evaluate_condition(): '9'

    并与cmd窗口输出一样逐行更新。

    现在正在研究第2个问题的解决方案

    关于python - Qt Designer实时显示python脚本的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927313/

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