Не удается правильно встроить окно в PyGTK с сокетом

Я следую руководству по сокету PyGTK, где вы встраиваете окно xterm в другое приложение.

Я скачал файл отсюда: http://www.pygtk.org/pygtk2tutorial/examples/socket.py

Когда я запускаю его следующим образом: http://faq.pygtk.org/index.py?req=show&file=faq19.015.htp я получаю два разных результата:

  1. В Ubuntu Karmic Koala (GTK 2.16) xterm отображается отдельно от окна сокета и не может использоваться.
  2. В Lucid Lynx (GTK 2.17) окно xterm исчезает, а окно сокета, кажется, получает фон от xterm, но ничего не происходит и, конечно, его нельзя использовать.

Я изменил скрипт, чтобы он выглядел так:

#!/usr/bin/python
import pygtk
pygtk.require('2.0')
import gtk
from subprocess import Popen

def plugged_event(widget):
    print "Inserted a widget"

window = gtk.Window()
window.connect("destroy", gtk.main_quit)
window.show()

socket = gtk.Socket()
window.add(socket)
socket.connect("plug-added", plugged_event)
sock_id = str(socket.get_id())
cmd = ["xterm", "-into", sock_id]
Popen(cmd)
socket.show()

gtk.main()

Кажется, все работает нормально, xterm встроен в окно сокета, но я не могу использовать клавиатуру, и курсор выглядит пустым. Это то же самое в обеих версиях GTK. Итак, кто-нибудь знает, можно ли это исправить или это ошибка?


person Eldelshell    schedule 21.05.2010    source источник


Ответы (1)


На первый взгляд это похоже на ошибку в xterm plug/socketing. Я могу воспроизвести на Lucid. Если у вас установлен vim-gtk, замените cmd на:

cmd = ["gvim", "--socketid", sock_id]

И ваш скрипт отлично работает для встраивания vim.

person Ali Afshar    schedule 27.05.2010
comment
Правильно, работает нормально. Но на самом деле проблема с rdesktop. Возможно, GTK не любит работать с не-GTK-вещами. В любом случае, спасибо за совет. - person Eldelshell; 28.05.2010
comment
Я могу воспроизвести вашу ошибку без rdesktop. - person Ali Afshar; 28.05.2010