寻找可嵌入的PyQt4终端小部件
我写了一个应用程序,其中有一些“后台”进程用来处理一些事情。这些子进程很可能会失败或者出现意外行为,因为它们需要在比较复杂的环境中运行,所以我更希望能让操作员完全控制这些进程。
注意:我使用的是一个基于subprocess
模块的类,而不是QProcess
,这样可以对运行的进程有更多的控制功能。
目前,我使用一个QPlainTextEdit
小部件来显示子进程的标准输出和错误信息,并且有一些按钮可以快速发送一些常用的信号(比如 INT、STOP、CONT、KILL 等),但是:
- 在某些情况下,发送一些输入也是很有用的。虽然可以用文本输入框来实现,但我更希望使用一些更“专业”的东西。
- 当然,没有直接的方法来解释特殊的控制字符,比如颜色代码、光标移动等。
- 我还需要实现控制台的自动滚动管理,但这并不保证100%能正常工作(有时候滚动锁定的效果并不像预期那样好,等等)。
所以:有没有人知道有什么可以用来满足这些需求的工具?
我找到了qtermwidget,但它似乎更倾向于处理一个 shell 进程(而且 Python 的绑定似乎只允许运行/bin/bash
)而不是与已经存在的进程进行输入输出的通信。
2 个回答
0
你可以试试QConsole(http://qconsole.sourceforge.net/)。我没用过这个软件,但看起来它正是你需要的那种东西。
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_())