Mouseevent in einer Radiobox

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
ennemoser
User
Beiträge: 7
Registriert: Freitag 31. August 2007, 18:48
Wohnort: Graz

Hallo,

ich weis nicht was ich da falsch mache. Ich kann die Radiobuttons durch anklicken nicht aktivieren. D.h. so wie ich das programmiert habe, kommt der Event irgendwie nicht an.

Code: Alles auswählen

#!c:/python24/python

import wx
import wx.aui

class MyFrame(wx.Frame):

   def __init__(self, parent):

      wx.Frame.__init__(self, parent, -1, title = "Pump v0.1", size = (800,600), pos = (300, 300))

      # Make new notebook
      self.nb = wx.aui.AuiNotebook(self)

      # Put notebook into sizer
      sizer = wx.BoxSizer()
      sizer.Add(self.nb, 1, wx.EXPAND)
      self.SetSizer(sizer)

      # Add tabs to notebook
      self.makeTabs()
      self.inputLayout()

   def tabNames(self):

      name = ['Concept', \
              'Design', \
              'Helix', \
              'Characteristic', \
              'hydr. Efficiency', \
              'Comments', \
             ]
      return name

   def fluidNames(self):

      fluids = ['Water/Gylcol', \
                'Water', \
                'Air', \
                'Other', \
               ]
      return fluids

   def makeTabs(self):

      for name in self.tabNames():
         panel = wx.Panel(self, -1)
         #panel.SetBackgroundColour((110, 110, 180))
         panel.SetBackgroundColour('WHITE')
         self.nb.AddPage(panel, name)

   def inputLayout(self):

      self.gbs = wx.GridBagSizer(6, 5)

      rb = wx.RadioBox(self.nb.GetPage(0), -1, "Fluid type", wx.DefaultPosition, wx.DefaultSize, self.fluidNames(), 1, wx.RA_SPECIFY_COLS)
      rb.SetSelection(0)   # Pre-select first element in radio box

      self.Bind(wx.EVT_RADIOBOX, self.OnRadio, rb)

      self.gbs.Add(rb, (0,5), (1,1), wx.ALIGN_LEFT | wx.ALL, 5)

      self.nb.GetPage(0).SetSizerAndFit(self.gbs)

   def OnRadio(self, event):
      self.selected = event.GetInt()
      print self.selected

class MyApp(wx.App):

   def OnInit(self):
      frame = MyFrame(None)
      frame.Show(True)
      self.SetTopWindow(frame)
      return True

if __name__ == '__main__':
   app = MyApp(redirect=False)
   app.MainLoop()
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Der Fehler liegt in Zeile 48. parent von panel ist nicht self, sondern self.nb. Nach Ändern der Zeile in

Code: Alles auswählen

 panel = wx.Panel(self.nb, -1)
klappt es.
Anbei: Einrückungen in Python sollten 4 und nicht 3 Zeichen betragen. '\' in Ausdrücken mit noch geöffneten Klammern sind unnötig.
MfG
HWK
Benutzeravatar
ennemoser
User
Beiträge: 7
Registriert: Freitag 31. August 2007, 18:48
Wohnort: Graz

Vielen herzlichen Dank.

Hinterher scheint alles so klar.
Ich hab mir mords den Kopf zerbrochen.

Gvim ist auch schon auf 4 Zeichen Einrückung umgestellt ;)

Andi
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Ach, noch etwas: Warum hast Du tabNames und fluidNames noch in Methoden gepackt und nicht gleich als Attribute verwendet?
Schau Dir bezüglich Namenskonventionen etc. auch mal folgendes an: http://www.python.org/dev/peps/pep-0008/
MfG
HWK
Antworten