import wx METHOD = 1 SCALE = 0.5 class TestPanel(wx.Panel): """ Shows some ways to scale text down """ def __init__(self, *args, **kw): wx.Panel.__init__(self, *args, **kw) self.Bind(wx.EVT_PAINT, self.OnPaint) def OnPaint(self, evt): pdc = wx.PaintDC(self) font = wx.FFont(28, wx.SWISS) pdc.SetFont(font) txt = "Here is some text" # draw the original unscaled text pdc.DrawText(txt, 10, 10) if METHOD == 0: # Create a new font that is scaled points = font.GetPointSize() * SCALE font.SetPointSize(points) pdc.SetFont(font) pdc.DrawText(txt, 10, 100) if METHOD == 1: # Draw to a bitmap and scale that w,h = pdc.GetTextExtent(txt) bmp = wx.EmptyBitmap(w, h) mdc = wx.MemoryDC(bmp) mdc.SetBackground(wx.Brush(self.GetBackgroundColour())) mdc.Clear() mdc.SetFont(font) mdc.DrawText(txt, 0,0) del mdc image = bmp.ConvertToImage() image = image.Scale(w*SCALE, h*SCALE, wx.IMAGE_QUALITY_HIGH) bmp = wx.BitmapFromImage(image) bmp.SetMaskColour(self.GetBackgroundColour()) pdc.DrawBitmap(bmp, 10,100) elif METHOD == 2: # Just scale the DC and draw the text again pdc.SetUserScale(SCALE, SCALE) pdc.DrawText(txt, 10/SCALE, 100/SCALE) elif METHOD == 3: # Use a GraphicsContext for scaling. Since it uses a # floating point coordinate system, it can be more # accurate. gc = wx.GraphicsContext.Create(pdc) gc.Scale(SCALE, SCALE) gc.SetFont(font) gc.DrawText(txt, 10/SCALE, 100/SCALE) app = wx.App() frm = wx.Frame(None, title="test_scaleText") pnl = TestPanel(frm) frm.Show() app.MainLoop()