我试图让XQuartz在OSX上工作,所以我可以通过Docker进行X11转发.我按照这里的说明操作.我相信我的问题可以仅通过第一部分来回答,但为了以防万一(为了避免XY问题),我也提供了第二部分.
我已经通过自制软件安装了它brew cask install xquartz.然后我open -a XQuartz开始吧.
测试它,如果我尝试打开它xterm,它不起作用:
MacBook-Pro:opencv-gui csaftoiu$ xterm
xterm: Xt error: Can't open display: /private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
Run Code Online (Sandbox Code Playgroud)
但是,伪文件存在:
MacBook-Pro:opencv-gui csaftoiu$ echo $DISPLAY
/private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
MacBook-Pro:opencv-gui csaftoiu$ ls -alh $DISPLAY
srw-rw-rw- 1 csaftoiu wheel 0B May 6 21:12 /private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
Run Code Online (Sandbox Code Playgroud)
我可以通过XQuartz打开一个xterm.然后:
bash-3.2$ echo $DISPLAY
:0
Run Code Online (Sandbox Code Playgroud)
此值也适用于常规OSX:
$ DISPLAY=:0 xterm
# opens xterm, waits for it to finish
$
Run Code Online (Sandbox Code Playgroud)
以下不起作用,不知道为什么基于这里的答案:
xterm: Xt error: Can't open display: localhost:0
MacBook-Pro:opencv-gui …Run Code Online (Sandbox Code Playgroud) 现有的环境和框架可以通过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中的按钮,我怎么能在这个嵌入式终端上运行?