寻找可嵌入的PyQt4终端小部件

3
我写了一个应用程序,其中启动了一些“后端”进程来执行某些操作。由于它们必须在相当困难的条件下运行,所以这些子进程非常可能会失败或出现意外行为,因此我更喜欢将它们的完全控制权交给操作员。
注意:我正在使用基于subprocess模块而非QProcess的类来运行这些进程,以获得对运行进程的更多控制功能。
目前,我正在使用一个QPlainTextEdit小部件,其中附加了来自子进程的标准输出/错误,以及一些按钮,用于快速发送一些常见信号(INT、STOP、CONT、KILL等),但是:
- 在某些情况下,发送一些输入也很有用。虽然可以使用文本输入框来完成,但我更喜欢使用更“专业”的东西。 - 当然,没有直接的方法来解释特殊的控制字符,例如颜色代码、光标移动等等。 - 我不得不实现控制台的自动滚动管理,但不能保证100%地工作得很好(有时滚动锁定不像预期的那样工作等)。
所以:有人知道我可以用什么来满足这些需求吗?
我找到了qtermwidget,但它似乎更偏向于处理一个 shell 进程(而 Python 的绑定似乎只允许你运行/bin/bash ),而不是与已经存在的进程 I/O 通信。

@gruszczy: дҪ дёәд»Җд№Ҳе°Ҷж Үзӯҫд»Һpyqt4ж”№дёәpyqtпјҹе®ғ们жҳҜдёӨдёӘйқһеёёдёҚеҗҢзҡ„PythonжЁЎеқ—пјҢеӣ дёәpyqtжҳҜж—§Qt3зҡ„з»‘е®ҡпјҢиҖҢPyQt4жҳҜQt4зҡ„з»‘е®ҡгҖӮ - redShadow
2个回答

4
这个能帮到您吗?
#!/usr/bin/env python
#-*- coding:utf-8 -*-

import  sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class embterminal(QWidget):

    def __init__(self):
        QWidget.__init__(self)
        self.process = QProcess(self)
        self.terminal = QWidget(self)
        layout = QVBoxLayout(self)
        layout.addWidget(self.terminal)
        self.process.start(
                'xterm',['-into', str(self.terminal.winId())])
        # Works also with urxvt:
        #self.process.start(
                #'urxvt',['-embed', str(self.terminal.winId())])

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

很酷,我不知道这是可能的..还需要一些调整(例如终端内的行数计算错误),但总体上似乎运行良好.. - redShadow
也许您对通信部分有所了解,能否帮我解答一个相关问题:https://dev59.com/lG7Xa4cB1Zd3GeqPnjsL - student
Python应用程序是否可以读取环境变量以显示信息,而不是每次都必须键入echo命令? - Ciasto piekarz
xterm的问题在于外观和感觉。Xterm的外观和感觉真的很糟糕。 - dexterous

0
你可以尝试使用 QConsole(http://qconsole.sourceforge.net/)。我没有用过它,但它看起来像是你要找的东西。

我刚试了一下,但它似乎不像描述所承诺的那样酷。我只能编译独立的例子,在如何构建Python模块方面没有找到任何说明。而且,这个例子本身在针对Qt4编译时似乎相当有缺陷(这将使用q3support,正如项目页面上指定的那样)我想这个项目更注重于TCL实现而不是Python实现。 - redShadow
真遗憾。很不幸,我不知道其他的。 - Optimal Cynic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接