我刚刚开始学习python和使用wxpython小部件。我尝试创建50 X 3 wx.grid。如果它是面板中的唯一对象,那么没有问题。但是,如果我尝试使用GridBagSizer包含其他对象,那么即使我为5行3列指定span =(5,3),它似乎也只占用sizer的一个单元格。
我尝试对包含网格的面板使用单独的BoxSizer(在我的代码中进行了注释),但它也不起作用。
import wx
import wx.grid
class Screen(wx.Frame):
def __init__(self, parent, title):
super(Screen, self).__init__(parent, title=title,
size=(500, 500))
self.paneltab = wx.Panel(self.panel)
self.paneltab.SetSize(size=(150,150))
#this is the grid I want to display properly
self.tab = wx.grid.Grid(self.paneltab)
self.tab.CreateGrid(50,3)
self.tab.SetColSize(0,150)
self.tab.SetColSize(1,100)
self.tab.SetColSize(2,50)
self.tab.SetColLabelValue(0, "USER")
self.tab.SetColLabelValue(1, "Log-In Time")
self.tab.SetColLabelValue(2, "Status")
self.SetLayout()
self.Centre()
def SetLayout(self):
sizer = wx.GridBagSizer(0,0)
#sizertab = wx.BoxSizer(wx.VERTICAL)
#self.paneltab.SetSizer(sizerTab)
sizer.Add((100,-1), pos=(0,0))
sizer.Add((100,-1), pos=(0,1))
sizer.Add((100,-1), pos=(0,2))
text1 = wx.StaticText(self.panel, label='Hello', style =
wx.ALIGN_CENTER)
text2 = wx.StaticText(self.panel, label='World', style =
wx.ALIGN_CENTER)
sizer.Add(text1, pos=(1,0), span=(1,1), flag=wx.TOP|wx.EXPAND,
border=5)
sizer.Add(text2, pos=(1,2), span=(1,2), flag=wx.TOP|wx.EXPAND,
border=5)
#sizer.Add(sizertab, pos=(2,1), span=(5,2),
flag=wx.TOP|wx.EXPAND, border=5)
sizer.Add(self.paneltab, pos=(2,0), span=(5,3),
flag=wx.TOP|wx.EXPAND, border=5)
self.panel.SetSizer(sizer)
sizer.Fit(self)
self.panel.SetBackgroundColour("thristle1")
def main():
app = wx.App()
screen = Screen(None, title='Server Consule')
screen.Show()
app.MainLoop()
if __name__ == '__main__':
main()
我希望网格显示为span =(5,3),但似乎显示为span =(1,1)。
答案 0 :(得分:0)
我认为您在代码中错过了这一点:
self.panel = wx.Panel(self)
例如,要使您的StaticText“使用”整个空间,可以这样尝试:
sizer.Add(text1,(1,0),(1,1),1,wx.TOP|wx.EXPAND,5)
sizer.Add(text2,(1,2),(1,2),1,wx.TOP|wx.EXPAND,5)
重要的是标志前的“ 1”。这使他们占用了整个空间。
答案 1 :(得分:0)
正如我在评论中所说,它看起来有些奇怪。仅使用多个BoxSizer
可能会更好。
您修改为产生以上代码的代码是:
import wx
import wx.grid
class Screen(wx.Frame):
def __init__(self, parent, title):
super(Screen, self).__init__(parent, title=title, size=(500, 500))
self.paneltab = wx.Panel(self)
self.paneltab.SetSize((500,250))
#this is the grid I want to display properly
self.tab = wx.grid.Grid(self.paneltab)
self.tab.CreateGrid(50,3)
self.tab.SetColSize(0,150)
self.tab.SetColSize(1,100)
self.tab.SetColSize(2,50)
self.tab.SetColLabelValue(0, "USER")
self.tab.SetColLabelValue(1, "Log-In Time")
self.tab.SetColLabelValue(2, "Status")
self.tab.SetMinSize((300,300))
self.text1 = wx.StaticText(self.paneltab, label='Hello', style = wx.ALIGN_CENTER)
self.text2 = wx.StaticText(self.paneltab, label='World', style = wx.ALIGN_CENTER)
self.SetLayout()
self.Centre()
def SetLayout(self):
sizer = wx.GridBagSizer(5,5)
sizer.Add((100,-1), pos=(0,0))
sizer.Add((100,-1), pos=(0,1))
sizer.Add((100,-1), pos=(0,2))
sizer.Add(self.text1, pos=(1,0), span=(1,1), flag=wx.TOP|wx.EXPAND, border=5)
sizer.Add(self.text2, pos=(1,2), span=(1,2), flag=wx.TOP|wx.EXPAND, border=5)
sizer.Add(self.tab, pos=(2,3), span=(3,5), flag=wx.TOP|wx.EXPAND, border=5)
self.paneltab.SetSizer(sizer)
self.paneltab.SetBackgroundColour("#D8BFD8")
def main():
app = wx.App()
screen = Screen(None, title='Server Console')
screen.Show()
app.MainLoop()
if __name__ == '__main__':
main()