pyside嵌入vim

时间:2012-11-13 11:08:25

标签: python vim pyside pygobject

我知道将vim嵌入Gtk application使用套接字,如下面的代码段

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_())

1 个答案:

答案 0 :(得分:2)

我认为实现这项工作的关键是将GTK转换为QT。 Google围绕您的代码,我看到Gtk.Socket说:

  

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

那么问题就变成QT调用他们的XEmbed类了吗?谷歌周围我发现QX11EmbedContainer说:

  

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

     

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

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