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

如何重写wx.grid.GridTableBase.SetRowLabelValue方法设置虚拟网格标签

解决方案

wx.grid.GridTableBase 本身没有内置的行、列标签存储空间,所有标签数据都需要你在派生类中自行维护。你需要同时实现标签写入的Set*方法和供网格读取标签的Get*方法,才能让自定义表头正常显示。

具体修改逻辑

  • 在HugeTable的初始化方法中新增两个列表,分别存储列标签和行标签,初始长度和表格的列数、行数对应
  • 完善SetColLabelValue、SetRowLabelValue方法,将传入的标签写入对应列表的指定索引位置
  • 新增GetColLabelValue、GetRowLabelValue方法,wxGrid 渲染表头时会主动调用这两个方法读取标签值

修改后完整代码

import wx
import wx.grid

gridcontents=[["x","x","x","x"],["y","y","y","y"],["z","z","z","z"],["l","l","l","l"]]

class Frame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=wx.ID_ANY)
        self.panel=wx.Panel(self)
        self.sizer=wx.BoxSizer(wx.VERTICAL)
        self.grid=wx.grid.Grid(self.panel, -1)
        self.CreateGrid()
        self.sizer.Add(self.grid,1,wx.EXPAND)
        self.panel.SetSizerAndFit(self.sizer)

    def CreateGrid(self):
        table = HugeTable()
        self.grid.SetTable(table,True)

class HugeTable(wx.grid.GridTableBase):
    def __init__(self):
        wx.grid.GridTableBase.__init__(self)
        # 初始化列标签、行标签存储列表
        self.col_labels = [""] * self.GetNumberCols()
        self.row_labels = [""] * self.GetNumberRows()
        # 测试设置第一列的列标签
        self.SetColLabelValue(0,"列 1")

    def SetRowLabelValue(self, row, label):
        # 行号合法就存储标签
        if 0 <= row < self.GetNumberRows():
            self.row_labels[row] = label
        return True

    def SetColLabelValue(self, col, label):
        # 列号合法就存储标签
        if 0 <= col < self.GetNumberCols():
            self.col_labels[col] = label
        return True

    # 新增:供网格读取列标签的方法
    def GetColLabelValue(self, col):
        if 0 <= col < self.GetNumberCols():
            return self.col_labels[col]
        return ""

    # 新增:供网格读取行标签的方法
    def GetRowLabelValue(self, row):
        if 0 <= row < self.GetNumberRows():
            return self.row_labels[row]
        return ""

    def GetNumberRows(self):
        return len(gridcontents)

    def GetNumberCols(self):
        return len(gridcontents[0])

    def IsEmptyCell(self, row, col):
        return False

    def GetValue(self, row, col):
        return str( gridcontents[row][col] )

app = wx.App()
frm = Frame(None)
frm.Show()
app.MainLoop()

内容的提问来源于stack exchange,提问作者Asyu7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:39:00