Assisstenten programmieren
Verfasst: Samstag 9. Januar 2010, 10:59
Hi
Ich hab folgendes Problem: Ich würde mir gerne eine Klasse schreiben, die mir die Funktionalität eines Assisstenten bereitstellt. Ich stelle mir dass so vor, dass es zwei Panels gibt: eins für den Inhalt, und eins darunter mit den Buttons Abbrechen, Zurück und Vor.
Ansonsten sollen Methoden wie hinzufügen dass hinzufügen von Panels (pro Seite eine) und vor / zurück dass navigieren ermöglichen.
Soweit funktioniert dass auch schon, ich habe aber das Problem, dass beim Weiterschalten die Widgets nicht richtig dargestellt werden (erste Seite passt, zweite Seite wird einmal dass border-Attribut nicht berücksichtigt und nur die ersten drei Buchstaben des Labels angezeigt).
Ich habe schon versucht, dass Problem mit Aufrufen von Refresh(), Update() und Validate() zu beheben, was aber nichts gebracht hat.
danke im voraus
baracuda
Ubuntu 9.10 / Python 2.6 / wx 2.6.3.2
Unter Windows gibts das gleiche Problem.
Ich hab folgendes Problem: Ich würde mir gerne eine Klasse schreiben, die mir die Funktionalität eines Assisstenten bereitstellt. Ich stelle mir dass so vor, dass es zwei Panels gibt: eins für den Inhalt, und eins darunter mit den Buttons Abbrechen, Zurück und Vor.
Ansonsten sollen Methoden wie hinzufügen dass hinzufügen von Panels (pro Seite eine) und vor / zurück dass navigieren ermöglichen.
Soweit funktioniert dass auch schon, ich habe aber das Problem, dass beim Weiterschalten die Widgets nicht richtig dargestellt werden (erste Seite passt, zweite Seite wird einmal dass border-Attribut nicht berücksichtigt und nur die ersten drei Buchstaben des Labels angezeigt).
Ich habe schon versucht, dass Problem mit Aufrufen von Refresh(), Update() und Validate() zu beheben, was aber nichts gebracht hat.
danke im voraus
baracuda
Code: Alles auswählen
import wx
class Assisstant (wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.step = 0
self.pages = []
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(self.sizer)
self.content_panel = wx.Panel(self, -1)
self.content_sizer = wx.BoxSizer(wx.VERTICAL)
self.content_panel.SetSizer(self.content_sizer)
self.sizer.Add(self.content_panel, 2, wx.EXPAND)
self.button_panel = ButtonPanel(self)
self.sizer.Add(self.button_panel, 0, wx.ALIGN_CENTER)
def add(self, page):
self.content_sizer.Add(page, 2, wx.EXPAND)
self.pages.append(page)
if len(self.pages) > 1:
self.pages[len(self.pages)-1].Show(False)
def next(self):
if self.step < len(self.pages)-1:
self.pages[self.step].Show(False)
self.step = self.step + 1
self.pages[self.step].Show(True)
else:
print "end"
def back(self):
if self.step > 0:
self.pages[self.step].Show(False)
self.step = self.step - 1
self.pages[self.step].Show(True)
else:
print "beginning"
class ButtonPanel (wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.parent = parent
sizer = wx.BoxSizer(wx.HORIZONTAL)
self.SetSizer(sizer)
self.cancel = wx.Button(self, -1, "Cancel")
self.back = wx.Button(self, -1, "Back")
self.next = wx.Button(self, -1, "Next")
sizer.Add(self.cancel, 0, wx.ALL, 10)
sizer.Add(self.back, 0, wx.ALL, 10)
sizer.Add(self.next, 0, wx.ALL, 10)
self.cancel.Bind(wx.EVT_BUTTON, self.cb_cancel)
self.back.Bind(wx.EVT_BUTTON, self.cb_back)
self.next.Bind(wx.EVT_BUTTON, self.cb_next)
def cb_cancel(self, evt):
exit()
def cb_back(self, evt):
self.parent.back()
def cb_next(self, evt):
self.parent.next()
if __name__ == "__main__":
app = wx.App()
a = Assisstant(None, -1, "Test")
p = wx.Panel(a, -1)
s = wx.BoxSizer(wx.VERTICAL)
p.SetSizer(s)
b = wx.Button(p, -1, "Just a test")
s.Add(b, 0, wx.ALL, 50)
p2 = wx.Panel(a, -1)
s2 = wx.BoxSizer(wx.VERTICAL)
p2.SetSizer(s2)
l = wx.StaticText(p2, -1, "Hello world!")
s2.Add(l, 0, wx.ALL, 20)
p3 = wx.Panel(a, -1)
s3 = wx.BoxSizer(wx.VERTICAL)
p3.SetSizer(s3)
l = wx.StaticText(p3, -1, "panel3")
s3.Add(l, 0, wx.ALL, 20)
a.add(p)
a.add(p2)
a.add(p3)
a.Show()
a.Center()
app.MainLoop()
Unter Windows gibts das gleiche Problem.