wxpython利用table展示表格支持增、删、改、查

本文详细介绍使用wxPython实现表格控件的两种方法,重点讲解通过继承wx.grid.PyGridTableBase实现表格数据的增删改查功能。文章提供具体代码示例,包括设置表头、绑定表格、修改数据、添加新行及删除行的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看一下效果

wxpython中实现表格有两种方式:

(1)一种是根据数据确定的数据的维度CreateGrid(n,n),也就是创建一个n行n列的表格,但这种方式实现新增数据和删除数据比较困难。

(2)创建类继承wx.grid.PyGridTableBase,并覆盖父类的一些方法,通过SetTable方法绑定上面实现的子类和Grid。

第一种方式官网有很多demo可以参考,这里主要讨论一下第二种方式,并实现增删改查。

一、首先创建PyGridTableBase的子类

class StudentInfoGridTable(grid.PyGridTableBase):
    def __init__(self, datas):
        grid.GridTableBase.__init__(self)

        self.datas = datas
        self.colLabels = [u'姓名', u'性别', u'学校', u'专业', u'年级']

这里通过colLabels设置了行头(也可以在类的实例化时传过来),通过self.datas=datas,在实例化时把要显示的数据传递过来。

二、调用

gridDatas = [
            [u'大仲马', u'男', 'SWUST', u'中文', u'研三'],
            [u'牛顿', u'男', u'SHUST', u'物理', u'博一'],
            [u'爱因斯坦', u'男', u'SHUST', u'物理', u'研一'],
            [u'居里夫人', u'女', u'SWUST', u'化学', u'研一'],
        ]
self.gridTable = wx.grid.Grid(self.panel, -1, pos=(5, 5), size=(490, 300), style=wx.WANTS_CHARS)
self.infoTable = StudentInfoGridTable(gridDatas)
self.gridTable.SetTable(self.infoTable, True)

gridDatas是要展示的数据,对前面的StudentInfoGridTable类进行初始化,然后创建Grid,并对Grid进行SetTable()。这样数据就可以展示了。

三、修改数据

默认是不能修改数据的,会提示需要重写SetValue方法,在StudentInfoGridTable类中

def SetValue(self, row, col, value):
    print(str(row) + "-" + str(col) + "-" + value)
    try:
        self.datas[row][col] = value
    except IndexError:
        # add a new row
        self.datas.append([''] * self.GetNumberCols())
        innerSetValue(row, col, value)

        # tell the grid we've added a row
        msg = grid.GridTableMessage(self,  # The table
                                    grid.GRIDTABLE_NOTIFY_ROWS_APPENDED,  # what we did to it
                                    1  # how many
                                    )

        self.GetView().ProcessTableMessage(msg)

四、增加数据

def AppendRows(self, newData=None):
    if newData is None:
        newData = [u'居里夫人1', u'女', u'WUST', u'化学', u'研3']
    self.datas.append(newData)
    self.isModified = True
    gridView = self.GetView()
    gridView.BeginBatch()
    appendMsg = wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED, 1)
    gridView.ProcessTableMessage(appendMsg)
    gridView.EndBatch()
    getValueMsg = wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES)
    gridView.ProcessTableMessage(getValueMsg)

    return True

可以把要添加的数据传递过来,然后在最后一条增加新的数据。当然也可以在指定的行添加数据。

五、删除

def DeleteRows(self, pos=0):
    if self.datas is None or len(self.datas) == 0:
        return False

    self.datas.remove(self.datas[pos + rowNum])

    gridView = self.GetView()
    gridView.BeginBatch()
    deleteMsg = wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, pos, 1)
    gridView.ProcessTableMessage(deleteMsg)
    gridView.EndBatch()
    getValueMsg = wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES)
    gridView.ProcessTableMessage(getValueMsg)

    return True

根据pos参数来删除指定的位置。

详细代码地址:https://download.csdn.net/download/bigboysunshine/11140768

 

参考:https://blog.csdn.net/ryanzll/article/details/7886566

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值