I am trying to put a login/password page inside one tab of a wx.Notebook
. But wx.BoxSizer
doesn't work - it piles the labels and buttons.
Here is my code.
# Define the tab content as classes:
class TabOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
# USERNAME LABEL
user_sizer = wx.BoxSizer(wx.HORIZONTAL)
user_lbl = wx.StaticText(self, label="Username:")
user_sizer.Add(user_lbl, 0, wx.ALL | wx.CENTER, 5)
# USERNAME CONTROL TEXT
self.user = wx.TextCtrl(self)
user_sizer.Add(self.user, 0, wx.ALL | wx.CENTER, 5)
# Password LABEL
password_sizer = wx.BoxSizer(wx.HORIZONTAL)
pass_lbl = wx.StaticText(self, label="Password:")
password_sizer.Add(pass_lbl, 0, wx.ALL | wx.CENTER, 5)
# PASSWORD CONTROL TEXT
self.password = wx.TextCtrl(self, style=wx.TE_PASSWORD | wx.TE_PROCESS_ENTER)
password_sizer.Add(self.password, 0, wx.ALL, 5)
# MAIN SIZER FOR TAB A
main_sizer = wx.BoxSizer(wx.VERTICAL)
main_sizer.Add(user_sizer, 0, wx.ALL, 5)
main_sizer.Add(password_sizer, 0, wx.ALL, 5)
login_btn = wx.Button(self, label="Login")
login_btn.Bind(wx.EVT_BUTTON,
handler=self.onLogin)
wx.Panel.SetSizer(main_sizer)
def onLogin(self):
return self.bot.login(username=self.user, password=self.password, use_cookie=True)
The problem is that you are assigning the main_sizer
in a wrong way. Change the line wx.Panel.SetSizer(main_sizer)
to self.SetSizer(main_sizer)
. Your TabOne
class comes from a wx.Panel
so in the same way you are making your widgets children of self, you will assign the main_sizer to self.