DevPlayer

GrowHide Widget Effect

Jan 17th, 2016
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.27 KB | None | 0 0
  1.  
  2. import wx
  3.  
  4.  
  5. class AutoSizeTextCtrl(wx.TextCtrl):
  6.  
  7.     AutoSizeStep = 1
  8.  
  9.     import wx.lib.newevent
  10.     ShrinkEffectEvent, EVT_SHRINK_EVENT = wx.lib.newevent.NewEvent()
  11.     GrowEffectEvent, EVT_GROW_EVENT = wx.lib.newevent.NewEvent()
  12.  
  13.     def __init__(self, parent, id=wx.ID_ANY, value=wx.EmptyString, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, validator=wx.DefaultValidator, name=wx.TextCtrlNameStr):
  14.  
  15.         # We will not be able to set the expanded widget height during GrowEffectEvent without an initial size.
  16.         assert size[1] > 0
  17.         self.FirstHeight = size[1]
  18.  
  19.         # Prevent processing of ShrinkEffectEvent and GrowEffectEvent at aame time.
  20.         self.Shrinking = False
  21.         self.Growing = False
  22.  
  23.         wx.TextCtrl.__init__(self, parent, id, value, pos, size, style, validator, name)
  24.  
  25.         self.Bind(AutoSizeTextCtrl.EVT_SHRINK_EVENT, self.onShrink)
  26.         self.Bind(AutoSizeTextCtrl.EVT_GROW_EVENT, self.onGrow)
  27.  
  28.  
  29.     def onShrink(self, event=None):
  30.         current_width, current_height = self.GetSize()
  31.         if current_height > 0 and not self.Growing:
  32.             self.Shrinking = True
  33.             current_height -= self.AutoSizeStep
  34.             self.SetSize(-1, current_height)
  35.             event = AutoSizeTextCtrl.ShrinkEffectEvent()
  36.             wx.PostEvent(self, event)
  37.         elif current_height <= 0:
  38.             self.Shrinking = False
  39.  
  40.  
  41.     def onGrow(self, event=None):
  42.         current_width, current_height = self.GetSize()
  43.         if current_height < self.FirstHeight and not self.Shrinking:
  44.             self.Growing = True
  45.             current_height += self.AutoSizeStep
  46.             self.SetSize(-1, current_height)
  47.             event = AutoSizeTextCtrl.GrowEffectEvent()
  48.             wx.PostEvent(self, event)
  49.         elif current_height >= self.FirstHeight:
  50.             self.Growing = False
  51.  
  52.  
  53.  
  54.  
  55. class Frame(wx.Frame):
  56.  
  57.     def __init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name=wx.FrameNameStr):
  58.  
  59.         wx.Frame.__init__(self, parent, id, title, pos, size, style, name)
  60.  
  61.         panel = wx.Panel(self)
  62.  
  63.         self.ButtonShowWidget = wx.Button(panel, label="Show TextCtrl", name='showbutton')
  64.         self.ButtonHideWidget = wx.Button(panel, label="Hide TextCtrl", name='hidebutton')
  65.  
  66.         button_sizer = wx.BoxSizer(wx.HORIZONTAL)
  67.         button_sizer.Add(self.ButtonShowWidget, 0, wx.ALL, 10)
  68.         button_sizer.Add(self.ButtonHideWidget, 0, wx.ALL, 10)
  69.  
  70.         self.AutoSizeTextCtrl = AutoSizeTextCtrl(panel, size=(-1,100), style=wx.TE_MULTILINE )
  71.  
  72.         panel_sizer = wx.BoxSizer(wx.VERTICAL)
  73.         panel_sizer.Add(button_sizer, 0, wx.EXPAND | wx.ALL, 0)
  74.         panel_sizer.Add(self.AutoSizeTextCtrl, 0, wx.EXPAND|wx.ALL)
  75.         panel.SetSizer(panel_sizer)
  76.  
  77.         frame_sizer = wx.BoxSizer(wx.VERTICAL)
  78.         frame_sizer.Add(panel, 1, wx.EXPAND|wx.ALL, 0)
  79.         self.SetSizer(frame_sizer)
  80.  
  81.         self.Show()
  82.  
  83.         self.Bind(wx.EVT_BUTTON, self.onButton)
  84.  
  85.  
  86.     def onButton(self, event):
  87.         button = event.GetEventObject()
  88.         name = button.GetName()
  89.  
  90.         # Here we start the Grow or Shrink Effect;
  91.         # in this case in the parent widget with buttons
  92.         if name == 'showbutton':
  93.             event = AutoSizeTextCtrl.GrowEffectEvent()
  94.             wx.PostEvent(self.AutoSizeTextCtrl, event)
  95.         elif name == 'hidebutton':
  96.             event = AutoSizeTextCtrl.ShrinkEffectEvent()
  97.             wx.PostEvent(self.AutoSizeTextCtrl, event)
  98.  
  99.  
  100. if __name__ == "__main__":
  101.     app = wx.App()
  102.     frame = Frame(None, title='Auto-Grow-Widget')
  103.     app.MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment