Seite 1 von 1

Mouseevent in einer Radiobox

Verfasst: Samstag 1. September 2007, 13:25
von ennemoser
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()

Verfasst: Samstag 1. September 2007, 15:42
von HWK
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

Verfasst: Samstag 1. September 2007, 16:21
von ennemoser
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

Verfasst: Sonntag 2. September 2007, 10:01
von HWK
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