d3p*_*3pd 3 python terminal user-interface pyqt
现有的环境和框架可以通过Bash终端使用,我想在其中创建一个GUI.我想到的是以下流程:
有什么方法可以创建这样的GUI?我意识到与现有环境交互的想法可能很棘手.如果它特别棘手,我愿意在GUI的一个会话中重新创建环境.在任何情况下,GUI如何与嵌入式终端交互.当按下GUI按钮时,如何在嵌入式终端中运行和显示命令?
GUI的基本启动(具有嵌入式终端)如下:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class embeddedTerminal(QWidget):
def __init__(self):
QWidget.__init__(self)
self.resize(800, 600)
self.process = QProcess(self)
self.terminal = QWidget(self)
layout = QVBoxLayout(self)
layout.addWidget(self.terminal)
self.process.start(
'xterm',
['-into', str(self.terminal.winId())]
)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = embeddedTerminal()
main.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
如果top按下GUI中的按钮,我怎么能在这个嵌入式终端上运行?
如果它必须是一个真正的终端和一个真正的shell(而不只是接受一行输入,运行一些命令,然后显示输出) - tmux怎么样?
您可以使用类似的东西tee将输出返回到您的程序中.
请注意,tmux会话可能会在您的程序运行中持续存在,因此您需要了解其工作原理以及如何控制它.
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class embeddedTerminal(QWidget):
def __init__(self):
QWidget.__init__(self)
self._processes = []
self.resize(800, 600)
self.terminal = QWidget(self)
layout = QVBoxLayout(self)
layout.addWidget(self.terminal)
self._start_process(
'xterm',
['-into', str(self.terminal.winId()),
'-e', 'tmux', 'new', '-s', 'my_session']
)
button = QPushButton('List files')
layout.addWidget(button)
button.clicked.connect(self._list_files)
def _start_process(self, prog, args):
child = QProcess()
self._processes.append(child)
child.start(prog, args)
def _list_files(self):
self._start_process(
'tmux', ['send-keys', '-t', 'my_session:0', 'ls', 'Enter'])
if __name__ == "__main__":
app = QApplication(sys.argv)
main = embeddedTerminal()
main.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
更多信息:https://superuser.com/questions/492266/run-or-send-a-command-to-a-tmux-pane-in-a-running-tmux-session