当前位置: 移动技术网 > IT编程>脚本编程>Python > 支持插入、添加、删除的PyGridTableBase子类

支持插入、添加、删除的PyGridTableBase子类

2019年04月05日  | 移动技术网IT编程  | 我要评论

李宏毅咆哮,选老顶迅雷下载,杰克逊-马丁内斯

网格控件是用以显示一个二维的数据集的。要使用该控件显示有用的信息,你需要告诉该控件它工作所基于的是什么数据。在wxpython中,有两种不同的机制用于在网格控件中处理数据,它们之间在处理数据的添加,删除和编辑的方式上有些许的不同。
网格控件可以直接处理每行和每列中的值。
数据可以通过使用一个网格表(grid table)来间接地处理
我们要讨论正是第二种方式,至于如何实现的细节,这里不再赘述(网上已经有很多例子了),只简单讲些主要步骤:
创建wx.grid.pygridtablebase的子类,并覆盖父类的一些方法。
通过settable方法绑定上面实现的子类和grid。
如果网格是使用creategrid()方法被初始化的,那么网格的insertrows、deleterows等方法总是可以工作的,并且在新的行或列中创建的单元格是以一个空字符串从为初始值的。如果网是使用settable()方法被初始化的,那么网格表必须支持对表的改变。要支持改变,你的网格表(pygridtablebase的子类)要对同样的改变方法进行覆盖。例如,如果你对你的网格调用了insertcols()方法,那么网格表也必须声明一个insertcols(pos=0, numcols=1)方法。该网格表的这个方法返回布尔值true表示支持改变,返回false则否决改变。
下面以覆盖insertrows方法为例,其中“self.data”为列表(list),每个元素都是一个字典,实现步骤如下:
添加一个元素(即newdata),其内容赋值为空,然后添加到数据变量中(即self.data)
创建一个插入消息(gridtable_notify_rows_inserted),并赋值;用来通知网格有新数据插入(类似mfc里面的postmessage,或者sendmessage)
创建一个查询消息(gridtable_request_view_get_values),用来通知网格查询并显示新数据。
    def insertrows(self,pos=1,numrows=1):
        """"""
        for num in range(0,numrows):
            newdata={};
            newdata[u'lable'] = u''    
            self.data.insert(pos,newdata)
           
        gridview = self.getview()
        gridview.beginbatch()
        insertmsg = wx.grid.gridtablemessage(self,wx.grid.gridtable_notify_rows_inserted,pos,numrows)
        gridview.processtablemessage(insertmsg)
        gridview.endbatch()
        getvaluemsg = wx.grid.gridtablemessage(self,wx.grid.gridtable_request_view_get_values)
        gridview.processtablemessage(getvaluemsg)       
              
        return true


    def appendrows(self,numrows=1):
        """"""
        for num in range(0,numrows):
            newdata={};
            newdata[u'lable'] = u''        
            self.data.append(newdata)
        self.ismodified = true
        gridview = self.getview()
        gridview.beginbatch()
        appendmsg = wx.grid.gridtablemessage(self,wx.grid.gridtable_notify_rows_appended,numrows)
        gridview.processtablemessage(appendmsg)
        gridview.endbatch()
        getvaluemsg = wx.grid.gridtablemessage(self,wx.grid.gridtable_request_view_get_values)
        gridview.processtablemessage(getvaluemsg)
       
        if self.ongridvaluechanged:
            self.ongridvaluechanged() 
           
        return true
   
    def deleterows(self,pos=0,numrows=1):
        if self.data is none or len(self.data) == 0:
            return false


        for rownum in range(0,numrows):
            self.data.remove(self.data[pos+rownum])
       
        gridview = self.getview()
        gridview.beginbatch()
        deletemsg = wx.grid.gridtablemessage(self,wx.grid.gridtable_notify_rows_deleted,pos,numrows)
        gridview.processtablemessage(deletemsg)
        gridview.endbatch()
        getvaluemsg = wx.grid.gridtablemessage(self,wx.grid.gridtable_request_view_get_values)
        gridview.processtablemessage(getvaluemsg)
 
        if self.ongridvaluechanged:
            self.ongridvaluechanged()
           
        return true

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网