[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