wxPython如何调整文本适配Grid单元格及正确获取单元格属性
解决方法
你不需要通过GridTable对象获取单元格属性,直接使用wx.grid.Grid类本身提供的接口即可,修改后的代码逻辑如下:
def OnSize(self, event): # 此处替换为你自己计算的单个单元格尺寸 cell_height = size.GetHeight() for row in range(sudoku_9x9grid.rowscols): for col in range(sudoku_9x9grid.rowscols): # 获取单元格属性对象 attr = self.GetCellAttr(row, col) # 处理属性不存在的情况,新建默认属性 if not attr: attr = wx.grid.GridCellAttr() font = attr.GetFont() font.SetPixelSize(wx.Size(0, int(0.9 * cell_height))) attr.SetFont(font) # 把修改后的属性写回单元格 self.SetCellAttr(row, col, attr) # 释放属性对象的引用计数,避免内存泄漏 attr.DecRef() # 重绘网格让修改生效 self.Refresh() event.Skip()
相关说明
- 你之前遇到的
GridStringTable没有GetAttrPtr的问题,是因为默认的GridStringTable没有开启自定义属性存储的支持,如果你要通过Table层面操作属性,需要自己继承GridTableBase重写GetAttrPtr、SetAttr等方法,对简单需求来说没必要,直接用Grid层面的接口更方便。 - 网格属性的优先级是:单元格专属属性 > 行专属属性 > 列专属属性 > 全局默认属性,修改单元格属性会覆盖上层的默认配置。
- 所有通过
GetCellAttr获取的属性对象都是引用计数的智能指针,使用完成后必须调用DecRef减少引用计数,否则会出现内存泄漏问题。
内容的提问来源于stack exchange,提问作者kaltorak
相关产品推荐
相关产品推荐

