【问题标题】:pyside embed vimpyside 嵌入 vim
【发布时间】:2012-11-13 11:08:24
【问题描述】:

我知道将 vim 嵌入到 Gtk application 中,使用类似于以下 sn-p 的套接字

from gi.repository import Gtk
import subprocess

win=Gtk.Window()
win.set_default_size(600,800)
win.connect('delete-event', Gtk.main_quit)
editor = Gtk.Socket()
win.add(editor)
editor.connect("plug-removed", Gtk.main_quit)
subprocess.Popen(["/usr/bin/gvim", \
        "--socketid", str(editor.get_id())])
win.show_all()
Gtk.main()

如何在PySide 中做到这一点?我在 pyside 中找不到任何对套接字的引用。

更新(使用 JimP 的想法)

以下代码在 Pyside 小部件中嵌入了一个 gvim 实例。然而,gvim 窗口似乎没有调整到父窗口的完整大小。

import sys
from PySide import QtGui
from PySide import QtCore

app = QtGui.QApplication(sys.argv)    
win = QtGui.QWidget()
win.resize(600, 800)

container = QtGui.QX11EmbedContainer(win)
container.show()
QtCore.QObject.connect(container, 
    QtCore.SIGNAL("clientClosed()"), 
    QtCore.QCoreApplication.instance().quit)
winId = container.winId()
process = QtCore.QProcess(container)
options = ["--socketid", str(winId)]
process.start("gvim", options)

win.show()    
sys.exit(app.exec_())

【问题讨论】:

  • 有没有办法做到这一点?如果不是套接字,任何其他方式也可以。我只需要将 vim 嵌入到 pyside 应用程序中。
  • 没有答案并不意味着不可能。只是看到你问题的人都不知道该怎么做。您还应该添加指向相关 PySide 的链接。 GVim 也是 GTK,我不确定它在 QT 环境中如何工作。
  • @romainl 好的....gvim 可能无法如您所说。我只是在寻找一种将 vim 嵌入到 pyside 应用程序中的方法。使用上面的代码,我可以做一个 Gtk 应用程序。但是我对如何在 pyside 应用程序中实现相同的目标一无所知。关于链接,我不知道相关代码。那么您提到的是哪个链接?
  • 我不知道 PySide 是什么,所以我在 Google 上查找了它。您可能需要添加一两个链接,以帮助人们了解您的目标。你看到qtvim了吗?
  • 我更新了链接。我不太了解 qtvim,但这似乎是用 C 编写的。我一直在寻找 pythonic 实现。无论如何感谢您指出这一点。

标签: python vim pyside pygobject


【解决方案1】:

我认为实现这项工作的关键是将 GTK 语音翻译为 QT 语音。谷歌一下你的代码,我看到Gtk.Socket 说:

GtkSocket 和 GtkPlug 之间的通信遵循 XEmbed 协议。该协议也已在其他工具包中实现, 例如Qt,在嵌入 Qt 时允许相同级别的集成 GTK 中的小部件,反之亦然。

那么问题就变成了 QT 将它们的 XEmbed 类称为什么?我在 Google 周围找到了QX11EmbedContainer,上面写着:

PySide.QtGui.QX11EmbedContainer 可以嵌入 XEmbed 来自 Qt 以外的工具包的小部件,例如 GTK+。随意的 (非 XEmbed)X11 小部件也可以嵌入,但 XEmbed 特定 诸如窗口激活和焦点处理之类的功能就会丢失。

PySide.QtGui.QX11EmbedContainer 的 GTK+ 等价物是 GtkSocket。 相应的 KDE 3 小部件称为 QXEmbed。

我目前没有运行 PySide,但QX11EmbedContainer 上的那个页面包含一些示例 C++ 代码,我认为这些代码可以帮助您到达需要的地方。您需要将 C++ 翻译成 Python,但我认为这不会太难。

【讨论】:

  • 优秀..!差不多好了。我更新了新代码。有一个问题。当我调整父窗口的大小时,嵌入的 gvim 实例不会调整大小。我确信这很简单,但不知道是什么。
猜你喜欢
  • 2017-10-16
  • 2013-08-18
  • 2019-04-03
  • 2013-07-28
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
相关资源
最近更新 更多