股票

sizer = wx.FlexGridSizer(rows, cols, vgap, hgap)

今天调试python程序遇到一个告警:

return _core_.Sizer_Add(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion “Assert failure” failed at ..\..\src\common\sizer.cpp(1401) in wxGridSizer::DoInsert(): too many items (4 > 3*1) in grid sizer (maybe you should omit the number of either rows or columns?)

反复比较与示例程序的区别,发现还是一模一样,网上查找别人的程序,也没发现问题,后来终于找到问题原因:

sizer = wx.FlexGridSizer(1, 3, 20, 20)

构造函数:wx.FlexGridsSizer(int rows=1, int cols=0, int vgap=0, int hgap=0)

rows 定义 GridSizer 的行数

cols 定义 GridSizer 的列数

vgap 定义垂直方向上行间距

hgap 定义水平方向上列间距

但是,注意原函数中的行数是 1,列数是 3,因此,在下面使用方法

sizer.Add(b)

添加按钮的时候,按钮总数不能超过 3 个,不然就会产生上面的错误。猜想原因是编译器向sizer中放按钮,到第四个发现没位置放了,所以告警。

修改方案很简单,留够位置就行了,我一共9个按钮,所以把 rows 改为4就可以了。

附源代码:

  1. #!/usr/bin/env python  
  2.   
  3. import wx  
  4. import wx.lib.buttons as buttons  
  5.   
  6.   
  7. class GenericButtonFrame(wx.Frame):  
  8.     def __init__(self):  
  9.         wx.Frame.__init__(self, None, -1, ‘Generic Button Example’,  
  10.                           size=(500, 350))  
  11.         panel = wx.Panel(self, -1)  
  12.           
  13.         sizer = wx.FlexGridSizer(4, 3, 20, 20)  
  14.         b = wx.Button(panel, -1, “A wx.Button”)  
  15.         b.SetDefault()  
  16.         sizer.Add(b)  
  17.           
  18.         b = wx.Button(panel, -1, “non-default wx.Button”)  
  19.         sizer.Add(b)  
  20.         sizer.Add((10, 10))  
  21.           
  22.         b = buttons.GenButton(panel, -1, ‘Generic Button’)  
  23.         sizer.Add(b)  
  24.   
  25.         b = buttons.GenButton(panel, -1, ‘disabled Generic’)# invalid generic button  
  26.         b.Enable(False)  
  27.         sizer.Add(b)  
  28.            
  29.         b = buttons.GenButton(panel, -1, ‘bigger’)# a button with a customer size and color  
  30.         b.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False))  
  31.         b.SetBezelWidth(5)  
  32.         b.SetBackgroundColour(“Navy”)  
  33.         b.SetForegroundColour(“white”)  
  34.         b.SetToolTipString(“This is a BIG button…”)  
  35.         sizer.Add(b)  
  36.            
  37.         bmp = wx.Image(“bitmap.ico”, wx.BITMAP_TYPE_ANY).ConvertToBitmap()  
  38.         b = buttons.GenBitmapButton(panel, -1, bmp)# generic bit button  
  39.         sizer.Add(b)  
  40.            
  41.         b = buttons.GenBitmapToggleButton(panel, -1, bmp)# generic bit toggle button  
  42.         sizer.Add(b)  
  43.            
  44.         b = buttons.GenBitmapTextButton(panel, -1, bmp, “Bitmapped Text”,  
  45.                                         size=(175, 75))# bit text button  
  46.         b.SetUseFocusIndicator(False)  
  47.         sizer.Add(b)  
  48.            
  49.         b = buttons.GenToggleButton(panel, -1, “Toggle Button”)# generic toggle button  
  50.         sizer.Add(b)  
  51.           
  52.         panel.SetSizer(sizer)  
  53.           
  54. if __name__==’__main__‘:  
  55.     app = wx.PySimpleApp()  
  56.     frame = GenericButtonFrame()  
  57.     frame.Show()  
  58.     app.MainLoop()  
打赏
原文链接:,转发请注明来源!

发表评论