使用 wxpython 在面板中小部件的位置
position of widget in a panel using wxpython
我试图将 radioBox 放在中央,在其下方放置一个按钮,但无论我如何尝试,radioBox 都位于框架的左上角,而按钮甚至不显示! .
我不明白为什么会这样
class Panelchoose(wx.Panel):
"""
panel for calculating separately without saving
"""
def __init__(self ,*args, **kw):
super(Panelchoose, self).__init__(*args, **kw)
self.SetBackgroundColour('#48C9B0')
topsizer=wx.BoxSizer(wx.VERTICAL)
radiosizer=wx.BoxSizer(wx.VERTICAL)
btnsizer=wx.BoxSizer(wx.HORIZONTAL)
lblist=['calculationGrid','calculations','xyz2comcat']
self.rbox=wx.RadioBox(self,label="choose from the models below: ",
choices=lblist,majorDimension=3,
style=wx.RA_SPECIFY_ROWS)
btn_next=wx.Button(self ,label=" NEXT ")
#self.Bind(wx.EVT_BUTTON,self.next_, btn_next)
topsizer.Add(self.rbox,0,wx.CENTER|wx.ALIGN_CENTER_VERTICAL,10)
btnsizer.Add(btn_next,0,wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.EXPAND,5)
topsizer.Add(btnsizer,4,wx.CENTER|wx.BOTTOM,10)
您忘记的部分是告诉您的面板它的 sizer 是什么。如果您将 self.SetSizer(topsizer)
添加到 class 的 __init__
的末尾,它将按您预期的那样工作。
这是一个完整的可运行版本:
import wx
class Panelchoose(wx.Panel):
"""
panel for calculating separately without saving
"""
def __init__(self ,*args, **kw):
super(Panelchoose, self).__init__(*args, **kw)
self.SetBackgroundColour('#48C9B0')
topsizer=wx.BoxSizer(wx.VERTICAL)
radiosizer=wx.BoxSizer(wx.VERTICAL)
btnsizer=wx.BoxSizer(wx.HORIZONTAL)
lblist=['calculationGrid','calculations','xyz2comcat']
self.rbox=wx.RadioBox(self,label="choose from the models below: ",
choices=lblist,majorDimension=3,
style=wx.RA_SPECIFY_ROWS)
btn_next=wx.Button(self ,label=" NEXT ")
#self.Bind(wx.EVT_BUTTON,self.next_, btn_next)
topsizer.Add(self.rbox,0,wx.CENTER|wx.ALIGN_CENTER_VERTICAL,10)
btnsizer.Add(btn_next,0,wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.EXPAND,5)
topsizer.Add(btnsizer,0,wx.CENTER|wx.BOTTOM,10)
self.SetSizer(topsizer)
if __name__ == '__main__':
app = wx.App(False)
frame = wx.Frame(None, title='Test')
Panelchoose(parent=frame)
frame.Show()
app.MainLoop()
我试图将 radioBox 放在中央,在其下方放置一个按钮,但无论我如何尝试,radioBox 都位于框架的左上角,而按钮甚至不显示! . 我不明白为什么会这样
class Panelchoose(wx.Panel):
"""
panel for calculating separately without saving
"""
def __init__(self ,*args, **kw):
super(Panelchoose, self).__init__(*args, **kw)
self.SetBackgroundColour('#48C9B0')
topsizer=wx.BoxSizer(wx.VERTICAL)
radiosizer=wx.BoxSizer(wx.VERTICAL)
btnsizer=wx.BoxSizer(wx.HORIZONTAL)
lblist=['calculationGrid','calculations','xyz2comcat']
self.rbox=wx.RadioBox(self,label="choose from the models below: ",
choices=lblist,majorDimension=3,
style=wx.RA_SPECIFY_ROWS)
btn_next=wx.Button(self ,label=" NEXT ")
#self.Bind(wx.EVT_BUTTON,self.next_, btn_next)
topsizer.Add(self.rbox,0,wx.CENTER|wx.ALIGN_CENTER_VERTICAL,10)
btnsizer.Add(btn_next,0,wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.EXPAND,5)
topsizer.Add(btnsizer,4,wx.CENTER|wx.BOTTOM,10)
您忘记的部分是告诉您的面板它的 sizer 是什么。如果您将 self.SetSizer(topsizer)
添加到 class 的 __init__
的末尾,它将按您预期的那样工作。
这是一个完整的可运行版本:
import wx
class Panelchoose(wx.Panel):
"""
panel for calculating separately without saving
"""
def __init__(self ,*args, **kw):
super(Panelchoose, self).__init__(*args, **kw)
self.SetBackgroundColour('#48C9B0')
topsizer=wx.BoxSizer(wx.VERTICAL)
radiosizer=wx.BoxSizer(wx.VERTICAL)
btnsizer=wx.BoxSizer(wx.HORIZONTAL)
lblist=['calculationGrid','calculations','xyz2comcat']
self.rbox=wx.RadioBox(self,label="choose from the models below: ",
choices=lblist,majorDimension=3,
style=wx.RA_SPECIFY_ROWS)
btn_next=wx.Button(self ,label=" NEXT ")
#self.Bind(wx.EVT_BUTTON,self.next_, btn_next)
topsizer.Add(self.rbox,0,wx.CENTER|wx.ALIGN_CENTER_VERTICAL,10)
btnsizer.Add(btn_next,0,wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.EXPAND,5)
topsizer.Add(btnsizer,0,wx.CENTER|wx.BOTTOM,10)
self.SetSizer(topsizer)
if __name__ == '__main__':
app = wx.App(False)
frame = wx.Frame(None, title='Test')
Panelchoose(parent=frame)
frame.Show()
app.MainLoop()