网格出现一瞬间然后立即消失
Grid shows up for split second and then immediately disappears
我正在用 wxpython
做一个小项目,但在 wx.grid.Grid
上遇到了一些问题。网格嵌套在一个 sizer 中,该 sizer 嵌套在另一个 sizer (here's a photo) 中。但是,当它像那样时,网格会出现一瞬间然后消失。当它在一个sizer里面时它并没有消失。
我试过更改 sizer 类型以及 sizer 和网格的各种属性,但无济于事。我也试过更改部分代码,但意识到这与它无关,因为网格甚至没有显示在 wxGlade 中。
这是 wxGlade 生成的 .py 的一部分:
class frameRozvrh(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: frameRozvrh.__init__
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((640, 480))
self.statusbar = self.CreateStatusBar(1)
self.buttonPrev = wx.Button(self, wx.ID_ANY, "<<")
self.dateWeek = wx.adv.DatePickerCtrl(self, wx.ID_ANY, style=wx.adv.DP_DEFAULT)
self.buttonNext = wx.Button(self, wx.ID_ANY, ">>")
self.gridRozvrh = wx.grid.Grid(self, wx.ID_ANY, size=(1, 1))
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: frameRozvrh.__set_properties
self.SetTitle("Rozvrh hodin")
self.statusbar.SetStatusWidths([-1])
# statusbar fields
statusbar_fields = [u"Aktuální týden"]
for i in range(len(statusbar_fields)):
self.statusbar.SetStatusText(statusbar_fields[i], i)
self.dateWeek.Enable(False)
self.gridRozvrh.CreateGrid(0, 0)
self.gridRozvrh.EnableEditing(0)
self.gridRozvrh.EnableDragColSize(0)
self.gridRozvrh.EnableDragRowSize(0)
self.gridRozvrh.EnableDragGridSize(0)
self.gridRozvrh.SetFocus()
# end wxGlade
def __do_layout(self):
# begin wxGlade: frameRozvrh.__do_layout
sizer = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_1 = wx.GridBagSizer(0, 0)
sizer_1.Add(self.buttonPrev, (0, 0), (1, 1), wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 5)
sizer_1.Add(self.dateWeek, (0, 1), (1, 1), wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 5)
sizer_1.Add(self.buttonNext, (0, 2), (1, 1), wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 5)
sizer_1.AddGrowableCol(0)
sizer_1.AddGrowableCol(1)
sizer_1.AddGrowableCol(2)
sizer.Add(sizer_1, 0, wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 10)
sizer_2.Add(self.gridRozvrh, 0, wx.ALL | wx.EXPAND, 5)
sizer.Add(sizer_2, 0, wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 10)
self.SetSizer(sizer)
self.Layout()
我希望网格保持可见,而不是消失。
你的代码有两个问题
问题 1 在此行中:
self.gridRozvrh = wx.grid.Grid(self, wx.ID_ANY, size=(1, 1))
通过这条线,您可以创建一个宽度为 1 像素、高度为 1 像素的网格。将其更改为:
self.gridRozvrh = wx.grid.Grid(self, wx.ID_ANY, size=(100, 100))
或任何其他尺寸。
问题 2 在这一行:
self.gridRozvrh.CreateGrid(0, 0)
使用此行,您将创建一个包含 0 行和 0 列的网格。将其更改为:
self.gridRozvrh.CreateGrid(10, 10)
或任何其他需要的数字。
我正在用 wxpython
做一个小项目,但在 wx.grid.Grid
上遇到了一些问题。网格嵌套在一个 sizer 中,该 sizer 嵌套在另一个 sizer (here's a photo) 中。但是,当它像那样时,网格会出现一瞬间然后消失。当它在一个sizer里面时它并没有消失。
我试过更改 sizer 类型以及 sizer 和网格的各种属性,但无济于事。我也试过更改部分代码,但意识到这与它无关,因为网格甚至没有显示在 wxGlade 中。
这是 wxGlade 生成的 .py 的一部分:
class frameRozvrh(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: frameRozvrh.__init__
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((640, 480))
self.statusbar = self.CreateStatusBar(1)
self.buttonPrev = wx.Button(self, wx.ID_ANY, "<<")
self.dateWeek = wx.adv.DatePickerCtrl(self, wx.ID_ANY, style=wx.adv.DP_DEFAULT)
self.buttonNext = wx.Button(self, wx.ID_ANY, ">>")
self.gridRozvrh = wx.grid.Grid(self, wx.ID_ANY, size=(1, 1))
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: frameRozvrh.__set_properties
self.SetTitle("Rozvrh hodin")
self.statusbar.SetStatusWidths([-1])
# statusbar fields
statusbar_fields = [u"Aktuální týden"]
for i in range(len(statusbar_fields)):
self.statusbar.SetStatusText(statusbar_fields[i], i)
self.dateWeek.Enable(False)
self.gridRozvrh.CreateGrid(0, 0)
self.gridRozvrh.EnableEditing(0)
self.gridRozvrh.EnableDragColSize(0)
self.gridRozvrh.EnableDragRowSize(0)
self.gridRozvrh.EnableDragGridSize(0)
self.gridRozvrh.SetFocus()
# end wxGlade
def __do_layout(self):
# begin wxGlade: frameRozvrh.__do_layout
sizer = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_1 = wx.GridBagSizer(0, 0)
sizer_1.Add(self.buttonPrev, (0, 0), (1, 1), wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 5)
sizer_1.Add(self.dateWeek, (0, 1), (1, 1), wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 5)
sizer_1.Add(self.buttonNext, (0, 2), (1, 1), wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 5)
sizer_1.AddGrowableCol(0)
sizer_1.AddGrowableCol(1)
sizer_1.AddGrowableCol(2)
sizer.Add(sizer_1, 0, wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 10)
sizer_2.Add(self.gridRozvrh, 0, wx.ALL | wx.EXPAND, 5)
sizer.Add(sizer_2, 0, wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 10)
self.SetSizer(sizer)
self.Layout()
我希望网格保持可见,而不是消失。
你的代码有两个问题
问题 1 在此行中:
self.gridRozvrh = wx.grid.Grid(self, wx.ID_ANY, size=(1, 1))
通过这条线,您可以创建一个宽度为 1 像素、高度为 1 像素的网格。将其更改为:
self.gridRozvrh = wx.grid.Grid(self, wx.ID_ANY, size=(100, 100))
或任何其他尺寸。
问题 2 在这一行:
self.gridRozvrh.CreateGrid(0, 0)
使用此行,您将创建一个包含 0 行和 0 列的网格。将其更改为:
self.gridRozvrh.CreateGrid(10, 10)
或任何其他需要的数字。