【发布时间】:2019-01-20 13:46:57
【问题描述】:
我有 3 节课
一个是Console 类:
class Console(QWidget):
def __init__(self):
super().__init__()
self.editor = QPlainTextEdit(self)
self.editor.setReadOnly(True)
self.font = QFont()
self.font.setFamily(editor["editorFont"])
self.font.setPointSize(12)
self.layout = QVBoxLayout()
self.layout.addWidget(self.editor, 1)
self.setLayout(self.layout)
self.output = None
self.error = None
self.editor.setFont(self.font)
def run(self, command):
"""Executes a system command."""
out, err = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
self.output = out
self.error = err
self.editor.setPlainText((self.output + self.error).decode())
return self.output + self.error
另一个是Tabs 类,它将Console() 分配给变量self.console。
然后我有 Main 类,它有一个名为 Terminal 的函数,可以通过键盘快捷键 Shift+F10 调用
这将获取打开文件的当前文件名(由Tabs 类处理)并使用subprocess 运行它。
现在我们遇到了问题:当运行一些不是即时的程序时,整个 GUI 冻结,当Console 类执行 run 函数时,我不知道如何使 GUI 响应.
完整的代码可以在这里找到:https://github.com/Fuchsiaff/PyPad
【问题讨论】:
-
现在我看了一下,它只需要返回self.error,因为它是用来帮助用户找到错误的问题。
-
当我尝试弄乱信号时,我无法让它工作
-
首先我在第 556 行将 Console() 分配给 self.Console,然后在第 995 行使用它。
-
是的,那太棒了!
标签: python python-3.x pyqt subprocess pyqt5