0
我在wxPython中有間隔小部件的問題。默認情況下,wxPython小部件間距不正確
在下面的代碼中,默認情況下,Vbox2和Vbox3中的按鈕被擠壓,我不明白爲什麼。我認爲BoxSizer默認情況下應該展開以適應其所有內容。
我的問題是:我需要改變什麼來防止這種擁擠的按鈕?
以下是完整的代碼運行我的例子:
import wx
import sys
class GridFrame(wx.Frame):
def __init__(self, frame_name="grid frame",
panel_name="grid panel", parent=None):
title = 'Edit {} data'.format(panel_name)
super(GridFrame, self).__init__(parent=parent, id=wx.ID_ANY,
name=frame_name, title=title)
self.remove_cols_mode = False
self.panel = wx.Panel(self, name=panel_name)#, size=wx.GetDisplaySize())
self.grid_type = str(panel_name)
self.InitUI()
## Initialization functions
def InitUI(self):
"""
initialize window
"""
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
set1, set2, set3 = [], [], []
## btns set 1
for btn_name in ['btn1', 'btn1a']:
btn = wx.Button(self.panel, label=btn_name, name=btn_name)
set1.append((btn))
## Btns set 2
for btn_name in ['btn2', 'btn3', 'btn4']:
btn = wx.Button(self.panel, label=btn_name, name=btn_name)
set2.append((btn))
## btns set 3
for btn_name in ['btn5', 'btn6', 'btn7']:
btn = wx.Button(self.panel, label=btn_name, name=btn_name)
set3.append((btn))
## Add content to sizers
self.hbox = wx.BoxSizer(wx.HORIZONTAL)
vbox1 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox1'), wx.VERTICAL)
vbox2 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox2'), wx.VERTICAL)
vbox3 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox3'), wx.VERTICAL)
for btn in set1:
vbox1.Add(btn, flag=wx.ALL, border=5)
for btn in set2:
vbox2.Add(btn, flag=wx.ALL, border=5)
for btn in set3:
vbox3.Add(btn, flag=wx.ALL, border=5)
self.hbox.Add(vbox1, flag=wx.ALL, border=5)
self.hbox.Add(vbox2, flag=wx.ALL, border=5)
self.hbox.Add(vbox3, flag=wx.ALL, border=5)
# final layout, set size
self.main_sizer.Add(self.hbox, flag=wx.ALL|wx.ALIGN_CENTER|wx.SHAPED, border=20)
self.main_sizer.AddSpacer(20)
self.panel.SetSizer(self.main_sizer)
self.panel_sizer = wx.BoxSizer(wx.VERTICAL)
self.panel_sizer.Add(self.panel, 1)
self.SetSizer(self.panel_sizer)
self.panel_sizer.Fit(self)
self.Centre()
self.Show()
if __name__ == "__main__":
app = wx.App()
frame = GridFrame()
if '-i' in sys.argv:
import wx.lib.inspection
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()