[Python] MultiTextDialog da far scrollare in verticale

Adriano Barbieri adrianobarb a yahoo.it
Mar 9 Apr 2013 17:22:27 CEST


Ciao a tutti.
Ho una classe dinamica MultiTextEntryDialog che mi serve per la modifica dei 
campi di un record.
Ho la necessitą di fargli accettare anche pił di 32 campi, ho usato i sizer 
con le TextCtrl con RICH_style in cascata, solo che questi vanno fuori 
schermo in verticale.
Con lo screen reader li gestisco fino in fondo, ma un vedente no...
Non appare alcuna barra di scorrimento verticale e non riesco a far 
scrollare il contenuto della finestra nemmeno provando a gestire un evento 
con la rotella del mouse.

Qualcuno ha un idea di come adattargli uno scrolling a doc con tanto di sb?
Ho incollato la parte del sorgente in oggetto.
Grazie per qualsiasi aiuto.
Adriano

class MultiTextEntryDialog(wx.Dialog):
   pos=   wx.DefaultPosition, size=wx.DefaultSize,
   style=wx.DEFAULT_DIALOG_STYLE|wx.SB_VERTICAL, name=wx.DialogNameStr,
   input_labels=[], defaults=[], message=''):
  wx.Dialog.__init__(self, parent=parent, id=id, title=title, pos=pos,
    size=size, style=style, name=name)
  s = wx.BoxSizer(wx.VERTICAL)
  if message:
   s.Add(wx.StaticText(self, -1, message), 0, wx.ALL, 10)
   s.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5)
  s1 = wx.FlexGridSizer(len(input_labels), 2)
  s1.AddGrowableCol(1, 1)
  self.text_ctrls = []
  for n, lab in enumerate(input_labels):
   t = wx.TextCtrl(self, style=wx.TE_RICH2)
   self.text_ctrls.append(t)
   try:
    t.SetValue(defaults[n].strip(" \n"))
    t.SetInsertionPoint(0)
   except IndexError:
    pass
   s1.Add(wx.StaticText(self, -1, lab+":"), 0, 
wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
   s1.Add(t, 0, wx.EXPAND|wx.ALL, 5)
  s.Add(s1, 0, wx.EXPAND|wx.ALL, 5)
  s.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALL|wx.EXPAND, 5)
  btn=self.FindWindowById(wx.ID_CANCEL)
  btn.SetLabel("Annulla")
  self.SetSizer(s)
  if size == wx.DefaultSize:
   s.Fit(self)
  else:
   self.SetSize(size)

  self.Centre()

  self.scroll = wx.ScrolledWindow(self, -1)
  self.scroll.SetScrollbars(1, 1, self.GetVirtualSize()[0], 
self.GetVirtualSize()[1])
  self.Bind(wx.EVT_MOUSEWHEEL, self.OnScrollPage)


def OnScrollPage(self, event):
  r=self.GetWheelRotation()
  if r < 0:
   self.scroll.Scroll(1, 1)
  else:
   self.scroll.Scroll(self.GetVirtualSize()[0], self.GetVirtualSize()[1])




Maggiori informazioni sulla lista Python