#!/usr/bin/env python from wxPython.wx import * from wxPython.dllwidget import wxDllWidget, wxDllWidget_GetDllExt #---------------------------------------------------------------------- class TestFrame(wxFrame): def __init__(self): wxFrame.__init__(self, None, -1, "Test wxDllWidget") menu = wxMenu() menu.Append(101, "Send command &1") menu.Append(102, "Send command &2") menu.Append(103, "Send command &3") menu.AppendSeparator() menu.Append(110, "E&xit") mb = wxMenuBar() mb.Append(menu, "&Test") self.SetMenuBar(mb) EVT_MENU_RANGE(self, 101, 109, self.OnSendCommand) EVT_MENU(self, 110, self.OnExit) panel = wxPanel(self, -1) panel.SetFont(wxFont(12, wxSWISS, wxNORMAL, wxBOLD)) st = wxStaticText(panel, -1, "The widget below was dynamically imported from\n" "test_dll.dll or test_dll.so with no prior knowledge\n" "of it's contents or structure by wxPython.") self.dw = dw = wxDllWidget(panel, -1, "test_dll" + wxDllWidget_GetDllExt(), "TestWindow", size=(250, 150)) if dw.Ok(): # The embedded window is the one exported from the DLL print dw.GetWidgetWindow().GetClassName() # This shows that we can give it a child from this side of things. # You can also call any wxWindow methods on it too. wxStaticText(dw.GetWidgetWindow(), -1, "Loaded from test_dll...", pos=(10,10)) else: wxStaticText(dw, -1, "ERROR!!!!", pos=(20,20)) sizer = wxBoxSizer(wxVERTICAL) sizer.Add(wxStaticLine(panel, -1), 0, wxGROW) sizer.Add(st, 0, wxGROW|wxALL, 5) sizer.Add(dw, 1, wxGROW|wxALL, 5) panel.SetSizer(sizer) panel.SetAutoLayout(true) sizer.Fit(self) sizer.SetSizeHints(self) def OnExit(self, evt): self.Close() def OnSendCommand(self, evt): ID = evt.GetId() - 100 # use the menu ID as the command param = "" if ID == 2: dlg = wxTextEntryDialog(self, "Enter a colour name to pass to the embedded widget:") if dlg.ShowModal() == wxID_OK: param = dlg.GetValue() dlg.Destroy() self.dw.SendCommand(ID, param) #---------------------------------------------------------------------- if __name__ == "__main__": app = wxPySimpleApp() frame = TestFrame() frame.Show(true) app.MainLoop()