Ich stehe gerade auf der Leitung und komme einfach nicht weiter. Folgender Code:
Code: Alles auswählen
import wx
class Frame(wx.Frame):
def __init__(self, parent, id, title, suites):
wx.Frame.__init__(self, parent, id, title, size=(400, 200))
self.suites = suites
self.nb = wx.Notebook(self,-1)
self.feat_book = feat_nb(self.nb, -1, suites)
self.nb.AddPage(self.feat_book, "features")
################################################################################
class feat_nb(wx.Panel):
def __init__(self, parent, id, suite_labels):
wx.Panel.__init__(self, parent, id)
self.all_boxes = []
self.feature_boxes = {}
sizer = wx.BoxSizer(wx.HORIZONTAL)
for suite in suite_labels.keys():
box = self.MakeStaticBoxSizer(suite, suite_labels[suite])
sizer.Add(box, 0, wx.ALL, 10)
self.all_boxes.append(box)
self.SetSizer(sizer)
sizer.Fit(self)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def MakeStaticBoxSizer(self, suite_label, feat_labels):
box = wx.StaticBox(self, -1, suite_label)
sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
for label in feat_labels:
feat = wx.CheckBox(self, -1, label)
self.feature_boxes[label] = feat
sizer.Add(feat, 0, wx.ALL)
return sizer
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def set_CheckBoxes(self, features, suites):
for feature in features:
for suite in suites.keys():
if feature in suites[suite]:
self.feature_boxes[feature].SetValue(True)
###############################################################################
class App(wx.App):
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def __init__(self, redirect=False):
wx.App.__init__(self, redirect)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def OnInit(self):
self.suites = {"Gruppe 1": ["EINS", "ZWEI", "DREI"], "Gruppe 2": ["VIER", "FUENF", "SECHS", "SIEBEN"]}
self.features_on_start = ["EINS", "DREI", "FUENF"]
self.frame = Frame(None, -1, "test", self.suites)
self.SetTopWindow(self.frame)
self.frame.Show()
self.frame.feat_book.set_CheckBoxes(self.features_on_start, self.suites)
self.Bind(wx.EVT_CHECKBOX, self.OnEinsCheckbox, self.frame.feat_book.feature_boxes["EINS"])
return True
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def OnEinsCheckbox(self, evt):
print "EINS"
###############################################################################
if __name__=="__main__":
app = App()
app.MainLoop()
Jetzt möchte ich auch zu jedem Feature eine Ereignis-Funktion schreiben. Dazu benötige ich aber eine dynamisch erstelltes Binding zwischen jeder Checkbox und der dazu gehörenden Funktion:
* EINS --> OnEinsCheckbox()
* ZWEI --> OnZweiCheckbox()
* ...
Rein statisch im Quellcode wäre das ja kein Problem. Aber ich weis halt vorher nicht wieviele Suiten und Features aus der INI-Datei eingelesen werden. Hat mir vielleicht einer von euch einen Tipp?
Calo