【发布时间】:2019-05-27 06:50:01
【问题描述】:
我刚刚开始学习 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) 中。
【问题讨论】:
-
有些人可能会质疑试图将 50x3 网格塞入 gridbagsizer 中的一个小槽的原因!