:orphan: wx_ex ----- GR / wxPython interoperability example .. image:: ../_static/examples/wx_ex.png ---- .. code-block:: python import wx import os import gr # get_address = lambda obj_str: obj_str[obj_str.find('0x'): obj_str.find('>', obj_str.find('0x'))] def get_address(obj_str): digits = '0123456789abcdef' obj_str = obj_str.lower() pos = obj_str.find('0x') + 2 if pos >= 0: tmp_string = '0x' while pos < len(obj_str) and obj_str[pos] in digits: tmp_string += obj_str[pos] pos += 1 return int(tmp_string, 16) else: return None class GrWidget(wx.Panel): def __init__(self, parent, id): wx.Panel.__init__(self, parent, id) self.bm = None self.setupUi() os.environ['GKS_WSTYPE'] = "380" os.environ['GKS_DOUBLE_BUF'] = "True" self.DrawButton.Bind(wx.EVT_BUTTON, self.draw) self.QuitButton.Bind(wx.EVT_BUTTON, self.quit) self.Bind(wx.EVT_PAINT, self.paintEvent) def setupUi(self): self.DrawButton = wx.Button(self, 1, 'Draw') self.DrawButton.SetPosition((300, 10)) self.QuitButton = wx.Button(self, 2, 'Quit') self.QuitButton.SetPosition((400, 10)) def quit(self, event): gr.emergencyclosegks() self.GetParent().Destroy() def draw(self, event): self.bm = wx.EmptyBitmap(self.GetSizeTuple()[0], self.GetSizeTuple()[1]) dc = wx.MemoryDC(self.bm) os.environ['GKSconid'] = "%x!%x" % (get_address(repr(self)), get_address(repr(dc))) dc.SetBackground(wx.WHITE_BRUSH) dc.Clear() dc.DrawText("Surface Plot using wxWidgets ...", 15, 15) x = range(1, 481) y = range(1, 481) w, h, d = gr.readimage( os.path.join(os.path.dirname(os.path.realpath(__file__)), 'surf.png')) z = [ x & 0xff for x in d ] gr.setviewport(0, 1, 0, 1) gr.setwindow(1, 480, 1, 480) gr.setspace(1, 1000, 30, 80) gr.setcolormap(3) gr.surface(x, y, z, 6) gr.contour(x, y, range(1), z, 0) gr.updatews() self.Refresh() event.Skip() def paintEvent(self, ev): painter = wx.PaintDC(self) if self.bm != None: painter.DrawBitmap(self.bm, 0, 0) class MainFrame(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title=title) self.widget = GrWidget(self, -1) self.widget.SetSize((500, 500)) self.Fit() self.Centre() if __name__ == '__main__': app = wx.App() win = MainFrame(None, -1, title='GRWidget') win.Show() app.MainLoop()