Portál AbcLinuxu, 25. dubna 2024 14:35
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...
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.