Newbie: wx.CheckBox in wx.adv.wizard doesnt work in W10?

Hi!
I am new to wxPython, and have some fun with it, but run into a problem, where I dont know if it is a bug or bad coded.

I try to build a wizard and have a CheckBox in it, nothing special I think.

It perfoms perfect under Ubuntu 20.04LTS w/ Python 3.8.2 and wxPython4.1, but
if I start the same code on my Windows 10 w/ Python 3.7.7 or 3.8.5 also with a wxPython4.1 the Checkbox is not “checkable” I cant click it to “activate” it like on the Linux Machine

I think I do nothing special:

Getting a Sizer, building the checkbox, bind the event…

Any clues for me?

Well I admit, I got the code somewhere so its not “my beauty” but it works and its only for “playing around” with wizards :slight_smile:

Cheers
Matthias

import wx
from wx.adv import Wizard,WizardPage


class MyWizardPage(WizardPage):
   """ Hier erstellen wir die Seitenverlinkung und Events """
   
   def __init__(self, parent, title):
      """ Wir erben unseren eigenen Init ran"""
      WizardPage.__init__(self,parent)
      self.next = None  # Damit es deklariert ist
      self.prev = None  # Dito
      self.initializeUI(title)
      
   def initializeUI(self,title):
      # Default-Raster erstellen
      self.sizer = wx.GridBagSizer()
      self.SetSizer(self.sizer)
      
   def addWidget(self, widget, pos, span):
      self.sizer.Add(widget, pos, span, wx.EXPAND)
      
   def SetPrev(self,prev):
      self.prev = prev
      
   def SetNext(self,next):
      self.next = next
      
   def GetPrev(self):
      return self.prev
   
   def GetNext(self):
      return self.next
   
   
class MyWizard(Wizard):
   """"""
   
   def __init__(self):
      """ Constructor """
      Wizard.__init__(self,None,title="Grundeinstellungen")
      
      #groesse setzen
      self.SetPageSize((500,300))
      
      seite1 = self.create_seiten()
      
      forward_btn = self.FindWindowById(wx.ID_FORWARD)
      forward_btn.Disable()
      
      #self.timer = wx.Timer(self)
      #self.Bind(wx.EVT_TIMER, self.onUpdate, self.timer)
      #self.timer.Start(1)      
      
      self.RunWizard(seite1) 

   def create_seiten(self):
      seite1 = MyWizardPage(self,"Seite1")

      #Seite 1 
      seite1.SetName("Introseite")
      #Statischer Text
      #wiz_01_p01_st_01 = wx.StaticText(seite1,label=params['WizIntroText'])
      #wiz_01_p01_st_01 = wx.StaticText(seite1,label="lalal")
      #seite1.addWidget(wiz_01_p01_st_01,(1,1),(2,1))
      
      #self.text2 = wx.TextCtrl(seite1)
      #seite1.addWidget(self.text2, (4,1), (1,5))   

      wiz_01_chkb_01 = wx.CheckBox(self,wx.ID_ANY,"Ja, habe ich gelesen!",style=wx.CHK_2STATE) 
      seite1.addWidget(wiz_01_chkb_01,(1,2),(2,2))

      # Seite2
      seite2 = MyWizardPage(self,"Servername(n)")
      seite2.SetName("Servername")

      self.text3 = wx.TextCtrl(seite2)
      #self.Bind(wx.adv.EVT_WIZARD_PAGE_CHANGED, self.onPageChanged)

      #Seite 3
      seite3 = MyWizardPage(self,"Services")

      seite2.SetPrev(seite1)
      seite1.SetNext(seite2)
      seite3.SetPrev(seite2)
      seite2.SetNext(seite3)
      
      # BINDS
      
      self.Bind(wx.EVT_CHECKBOX, self.on_WizCb_klick, wiz_01_chkb_01)

      return seite1
   
   def on_WizCb_klick(self, event):  # wxGlade: MyDialog.<event_handler>
      print("Event handler 'on_WizCb_klick' not implemented!")
      event.Skip()

   
def main():
   wizzy = MyWizard()

if __name__ == "__main__":
   app = wx.App(False)
   main()
   app.MainLoop()
   app.ExitMainLoop()
   app.Destroy()

Your checkbox needs to be a child of seite1 (the wizard page) not self (the wizard).

1 Like

FACEPALM
Thank you so much…
Hehehe the error was simply in front of the screen, it can be so simple :slight_smile: :grin:

Cheers
Matthias