Portál AbcLinuxu, 31. října 2025 21:26
Ahoj, potřeboval bych do mé aplikace vložit jinou aplikaci, třeba xterm. Píši v pythonu a používám GTK. GTK má na to metodu socket, pres kterou lze vlozit jinou aplikaci Na netu jsem našel spousty návodů jak to udělat. Problém je ten, že již do vytvořené aplikace, kde použivám gtk.DrawingArea, nemůžu použít gtk.Socket. Mám to napsané takhle:
 self.window = gtk.Window() 
socket = gtk.Socket() 
gtk.gdk.threads_init() 
self.window.resize(320,240) 
self.window.connect("delete_event", self.delete_event) 
self.window.connect("destroy", self.destroy) 
self.window.show_all()  self.darea = gtk.DrawingArea() 
self.darea.connect("expose-event", self.menu_manager) 
self.window.add(self.darea)  #zde je problem  GtkWarning: Attempting to add a widget with type GtkSocket to a GtkWindow, but as a #GtkBin subclass a GtkWindow can only contain one widget at a time; it already contains a widget of type #GtkDrawingArea 
self.window.add(socket) 
self.window.show_all() 
xid = str(socket.get_id()) 
print xid - pak nekde jinde zavolam xterm s parametrem xid a mel by se ukazat. 
pak kdyz zakomentuji radek, ktery prida DrawingArea, tak to funguje dobre. diky za tip
self.layout = gtk.Layout(None, None)
self.layout.set_size(320,240)
self.layout.put(self.socket,10,10) 
self.layout.put(self.darea,0,0)
self.window.add(self.layout)
a kdyz to spustim zadna chyba se neobjevi. A gtk.socket vypise XID, tak to jakoby funguje, ale nezobrazuje. Nekde jsem nasel, ze se prvne musi nastavit velikost, ale gtk.socket nic takoveho nema.
uz tedy nevim
            
import gtk
window = gtk.Window()
window.connect('destroy', gtk.main_quit)
gtk.gdk.threads_init()
window.resize(320,240)
layout = gtk.Layout()
window.add(layout)
socket = gtk.Socket()
socket.set_size_request(200, 100)
layout.put(socket, 40, 40)
window.show_all()
xid = str(socket.get_id())
print(xid)
gtk.main()
Akorát mi v tom xtermu nefunguje vstup z klávesnice, a to ani když explicitně přidám key-press and key-release eventy a nastavím, že může mít keyboard focus.  S tím nevím, co dělat, Socket/Plug jsem nikdy v praxi nepouži...
             30.7.2012 11:38
Pavel Stárek             | skóre: 43
             | blog: Tady bloguju já :-)
             | Kolín
        30.7.2012 11:38
Pavel Stárek             | skóre: 43
             | blog: Tady bloguju já :-)
             | Kolín
         30.7.2012 11:40
Pavel Stárek             | skóre: 43
             | blog: Tady bloguju já :-)
             | Kolín
        30.7.2012 11:40
Pavel Stárek             | skóre: 43
             | blog: Tady bloguju já :-)
             | Kolín
         
            
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.