Embedded window in wxPython app

  • Thread starter Richard Townsend
  • Start date
R

Richard Townsend

I've been experimenting with passing a window handle from a wxPython app to
a Tkinter app. The Tkinter app should embed a Toplevel window containing a
Canvas widget in the wxPython app's Frame (see example below).

Both apps run, but the Tkinter app's output doesn't appear.

Can anyone see why this isn't working?

Using wxPython-2.5.1/Python 2.3.3/Win98 and Win2000.

regards
Richard

----------------------------

#!/usr/bin/env python
# generated by wxGlade 0.3.3 on Thu Jun 03 14:36:32 2004

import wx
import os


class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)

self.__set_properties()
self.__do_layout()
# end wxGlade


def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle("frame_1")
# end wxGlade

def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
self.Layout()
# end wxGlade


def StartSlave(self):
# Get the window id
window_id = str(self.GetHandle())
print 'In wx_app window_id =', window_id

script = 'tk_slave.py'
cmd = r"C:\python23\python.exe"
args = [script, script, window_id]
os.spawnv(os.P_NOWAIT, cmd, args)

#self.Refresh()


# end of class MyFrame


class MyApp(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
frame_1 = MyFrame(None, -1, "")
self.SetTopWindow(frame_1)
frame_1.Show(1)
frame_1.StartSlave()
return 1

# end of class MyApp

if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()

----------------------------

#!/usr/bin/env python
# Module: tk_slave.py

import sys
import Tkinter


class EmbeddedTk:
"""Create Embedded Tk app inside a wxPython app """

def __init__(self, window_id):
print 'Received window id =', window_id

self.window_id = window_id
self.root = Tkinter.Tk()
self.root.withdraw()

toplevel = Tkinter.Toplevel(use=self.window_id)
#toplevel = Tkinter.Toplevel(self.root)

self.c = Tkinter.Canvas(toplevel, width=250, height=250,
bg='white', bd=0)
self.c.pack()
self.c.create_rectangle(20,20,230,230)
self.root.mainloop()


if __name__ == '__main__':

if len(sys.argv) != 2:
sys.exit('Usage: python tk_slave.py window_id\n')
window_id = sys.argv[1]
EmbeddedTk(window_id)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top