Mouseevent in einer Radiobox

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

Mouseevent in einer Radiobox

Beitragvon ennemoser » Samstag 1. September 2007, 13:25

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

Beitragvon HWK » Samstag 1. September 2007, 15:42

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

Beitragvon ennemoser » Samstag 1. September 2007, 16:21

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

Beitragvon HWK » Sonntag 2. September 2007, 10:01

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder