You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:24:03