相关疑难解决方法(0)

Xt错误:如果使用默认的DISPLAY,则无法打开显示

概观

我试图让XQuartz在OSX上工作,所以我可以通过Docker进行X11转发.我按照这里的说明操作.我相信我的问题可以仅通过第一部分来回答,但为了以防万一(为了避免XY问题),我也提供了第二部分.

安装

我已经通过自制软件安装了它brew cask install xquartz.然后我open -a XQuartz开始吧.

本地xterms

测试它,如果我尝试打开它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)

x11 macos x11-forwarding docker xquartz

13
推荐指数
2
解决办法
2万
查看次数

如何使用嵌入在PyQt GUI中的终端

现有的环境和框架可以通过Bash终端使用,我想在其中创建一个GUI.我想到的是以下流程:

  • 在Bash会话中,设置框架环境.这会导致在会话中设置从环境变量到身份验证的所有内容.
  • 运行Python GUI脚本以包围现有会话并使后续步骤更容易运行.
  • GUI出现,在一侧显示嵌入式终端中的Bash会话,另一侧显示对应于可在现有框架环境中运行的各种命令的一组按钮.
  • 可以在GUI中按下按钮,从而导致运行某些Bash命令.运行结果显示在嵌入式终端中.

有什么方法可以创建这样的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中的按钮,我怎么能在这个嵌入式终端上运行?

python terminal user-interface pyqt

3
推荐指数
1
解决办法
7913
查看次数

标签 统计

docker ×1

macos ×1

pyqt ×1

python ×1

terminal ×1

user-interface ×1

x11 ×1

x11-forwarding ×1

xquartz ×1