2010-01-07 8 views
8

Je suis en train de créer une interface graphique pygtk et je veux y intégrer une application externe.pygtk comment incorporer une application externe dans mon interface graphique de pygtk

Est-ce que quelqu'un a une idée de comment cela peut-il être fait?

+0

Vous ne savez pas exactement ce que vous voulez dire par 'embed'? Pourriez-vous être plus précis sur votre situation? – zdav

+0

Qu'entendez-vous par "embed". Soyez plus précis et donnez des exemples. –

+1

Je l'ai déjà fait dans Gambas2. Cela devrait ressembler à ceci: http://upload.snelhest.org/images/0812134.png Vous pouvez voir dans la capture d'écran comment gparted s'intègre dans mon application. par 'embed' Je veux dire lancer une application externe ... mais au lieu d'avoir le gestionnaire de fenêtres pour le décorer et le placer sur le bureau, il doit aller directement dans mon application. Pensez-y comme faire un reparent mais sur une fenêtre pas un widget –

Répondre

4

Cela dépend de l'application que vous essayez d'intégrer dans le vôtre, mais si l'autre application est une application GTK (ou une application prenant en charge le protocole XEMBED), vous devriez pouvoir le faire avec gtk.Plug et gtk.Socket. Le tutoriel PyGTK a une section expliquant comment faire:

http://www.pygtk.org/pygtk2tutorial/sec-PlugsAndSockets.html

+0

J'ai regardé cela, mais je ne vois tout simplement pas comment cela pourrait m'aider à intégrer une application externe. L'identifiant de fenêtre rapporté par xwinfo est quelque chose comme 0x12343 mais la prise veut un identifiant de fenêtre dans un format LONG ... Je ne sais pas comment assembler ces 2 pièces ensemble –

+0

@ M0E-lnx: convertir entre hex et long: 'long ("0x12343", 16) '... – Sardathrion

3

Celui-ci pourrait aider. Lire l'article 19.15. Comment intégrer quelque chose à l'aide de Plugs and Sockets? (http://faq.pygtk.org/index.py?req=all#19.15) et découvrez comment intégrer une application X Window arbitraire dans un socket (Py) GTK.

1

Vous n'utilisez pas un programme externe pour obtenir l'ID gtk.Plug/gtk.Socket, ils ont leurs fonctions respectives pour cela. Voir ce tutoriel pour des exemples: link.

0

Si vous essayez de reparenter une fenêtre externe (qui peut ne pas être une fenêtre GTK), vous pouvez utiliser

w = gdk.window_foreign_new(window_id) 

pour obtenir un objet de fenêtre gdk à partir d'une poignée de fenêtre du système d'exploitation, puis utilisez

w.reparent(parent_window, x, y) 

pour le reparer dans un conteneur gtk existant.