寻找PyQt4嵌入式终端小部件

时间:2010-12-15 10:24:23

标签: python pyqt

我写了一个应用程序,除其他外,启动一些“后端”进程来做一些事情。 这些子过程很可能会失败或出现意外行为,因为它们必须在相当困难的条件下运行,所以我更愿意完全控制它们给操作员。

注意:我正在使用基于subprocess模块的类而不是QProcess来运行这些进程,以便在正在运行的进程中拥有更多控制功能。

目前,我正在使用一个QPlainTextEdit小部件,我从子进程中添加了标准输出/错误,还有一些按钮可以快速发送一些常见信号(INT,STOP,CONT,KILL,.. ),但是:

  • 在某些情况下,发送一些输入也很有用。虽然可以使用文本输入框来完成,但我更喜欢使用更“专业”的内容
  • 当然,没有直接的方法可以解释特殊控制字符,例如颜色代码,光标移动等。
  • 我必须实现控制台的自动滚动管理,但不能保证100%正常工作(有时滚动锁定不能按预期工作等)。

所以:有没有人知道我可以用来完成这些需求的东西?

我发现qtermwidget但它似乎更倾向于处理shell进程(并且Python绑定似乎只让你运行/bin/bash)而不是与已经存在的进程I / O进行通信。

2 个答案:

答案 0 :(得分: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_())

答案 1 :(得分:0)

你可以试试QConsole(http://qconsole.sourceforge.net/)。我没有使用它,但它看起来像你正在寻找的东西。