wxPython控件学习之wx.grid.Grid 表格控件


wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEditor为例)


wx.Grid 及其相关的类是用来显示和编辑类表格样式的数据。该控件为显示,编辑数据源提及交互供了丰富的特征。

wx.GridTableBase类控制要显示的实际数据。可以call CreateGrid()产生一个该类的实例对象。

wx.GridCellRenderer 基类,负责对单元格进行绘画。现在提供了默认的几种派生。

wx.GridCellEditor 基类,负责在cell editing状态下,显示对应的控件。现在提供了默认的几种派生。

如何添加、删除行,列和单元格?

本例中使用SetTable() 作为grid 的数据源。 那么重点来研究在这个情况下如何对grid 和 数据源进行增删改。

GridTableMessage 类,可以用来向表发送一些message,本例中 是对行的增删改操作, 那么我们只需要用其中的3个message:

GRIDTABLE_NOTIFY_ROWS_INSERTED 行插入的消息
GRIDTABLE_NOTIFY_ROWS_APPENDED
附近新行的消息
GRIDTABLE_NOTIFY_ROWS_DELETED 删除行的消息

GRIDTABLE_REQUEST_VIEW_GET_VALUES cell 值如果有更改的消息

1.在index插入一新行

grd.GridTableMessage(self,
grd.GRIDTABLE_NOTIFY_ROWS_INSERTED
,index
 改行所在的索引
,1 插入一行记录
)

2. 删除rowIndex行

grd.GridTableMessage(self,grd.GRIDTABLE_NOTIFY_ROWS_DELETED,
rowIndex,
 改行所在的索引
1 只删除一行

)

3. 附加一新行

grd.GridTableMessage(self,
grd.GRIDTABLE_NOTIFY_ROWS_APPENDED,
1
附近的新行个数
)


1 #-*-coding:utf-8
 2
 3 #-------------------------------------------------------------------------------
 4 # Name:        模块1
 5 # Purpose:
 6 #
 7 # Author:      ankier
 8 #
 9 # Created:     14/10/2012
10 # Copyright:   (c) ankier 2012
11 # Licence:     <your licence>
12 #-------------------------------------------------------------------------------
13
14 import wx, wx.grid as grd
15
16 #定购的Grid cell ComboBox editor
17 class GridCellComboBoxEditor(grd.PyGridCellEditor):
18     def __init__(self, choices = []):
19         grd.PyGridCellEditor.__init__(self)
20         self.__Choices = choices
21
22     def Create(self, parent, id, evtHandler):
23         """
24         Called to create the control, which must derive from wx.Control.
25         *Must Override*
26         """
27         self.__Parent = parent
28         self.__ComboBoxDialog = None
29         self.__ComboBoxButton = wx.ComboBox(parent, id, value = "", choices =self.__Choices)
30         self.__ComboBoxButton.SetEditable(False)
31         self.SetControl(self.__ComboBoxButton)
32         #添加新的event handler, 防止 弹出窗口后, cell 自动editor
33         newEventHandler = wx._core.EvtHandler()
34         if evtHandler:
35             self.__ComboBoxButton.PushEventHandler(newEventHandler)
36         self.__ComboBoxButton.Bind(wx.EVT_COMBOBOX, self.OnClick)
37
38
39     def OnClick(self, event):
40         self.endValue = self.__ComboBoxButton.GetStringSelection()
41
42
43     def SetSize(self, rect):
44         """
45         Called to position/size the edit control within the cell rectangle.
46         If you don‘t fill the cell (the rect) then be sure to override
47         PaintBackground and do something meaningful there.
48         """
49         self.__ComboBoxButton.SetDimensions(rect.x,rect.y,rect.width+2,rect.height+2,wx.SIZE_ALLOW_MINUS_ONE)
50
51     def Clone(self):
52         """
53         Create a new object which is the copy of this one
54         *Must Override*
55         """
56         return GridCellComboBoxEditor()
57
58     def BeginEdit(self, row, col, grid):
59         """
60         Fetch the value from the table and prepare the edit control
61         to begin editing. Set the focus to the edit control.
62         *Must Override*
63         """
64         self.startValue = grid.GetTable().GetValue(row, col)
65         self.endValue = self.startValue
66         self.__ComboBoxButton.SetStringSelection(self.startValue)
67
68     def EndEdit(self, row, col, grid):
69         """
70         Complete the editing of the current cell. Returns True if the value
71         has changed. If necessary, the control may be destroyed.
72         *Must Override*
73         """
74         changed = False
75         if self.endValue != self.startValue:
76             changed = True
77             grid.GetTable().SetValue(row, col, self.endValue) # update the table
78             self.startValue = ‘‘
79         return changed
80
81
82
83 #定购颜色cell colour column
84 class GridCellComboBoxRender(grd.GridCellStringRenderer):
85     def __init__(self):
86         grd.GridCellStringRenderer.__init__(self)

转自http://www.cnblogs.com/ankier/archive/2012/10/14/2723364.html
时间: 2024-10-06 00:11:21

wxPython控件学习之wx.grid.Grid 表格控件的相关文章

能在多种前端框架下使用的表格控件

近几年Web前端框架特别流行,比如AngularJS.AngularJS 2.ReactJS.KnockoutJS.VueJS等.表格控件是我们在开发中经常要用到的控件.有没有能够在多种前端控件下都能使用的表格控件?最近研究发现Wijmo中的FlexGrid是一款不错的表格控件,它能支持很多主流的框架.这里主要介绍在纯JavaScript和AngularJS下FlexGrid的使用. 一.在纯JavaScript下使用FlexGrid HTML文件: <!DOCTYPE html> <h

深入浅出ExtJS 第三章 表格控件(未完)

1 3.1 表格的特性简介 2 >.Ext中的表格功能:包括排序/缓存/拖动/隐藏某一列/自动显示行号/列汇总/单元格编辑等实用功能; 3 >.表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,其xtype为grid; 4 >.表格控件必须包含列(columns)定义信息,并指定表格的数据存储器(Ext.data.Store); 1 3.2 制作一个简单的表格 2 >1.列的定义是一个JSON数组,它是整个表格的列模型,应该首先创建; 3 var colu

【ExtJs】表格控件Grid的增删改查,利用renderer让操作列actioncolumn使用文字而不是图标

在<[ExtJs]与后台数据库交互的带分页表格组件grid的查询>(点击打开链接)中介绍了Grid控件是怎么分页显示的.再加上对此控件内的数据的增加.删除.修改,就真的是大功告成了.此控件的排序,应该在后台的数据库查询语句中增加一条order by语句即可,前台的排序在分页之后,仅能对当前页进行排序,没有什么意义.下面举一个例子来说明,如果对ExtJs的表格控件Grid进行增删改查 一.基本目标 还是在数据库中有一张user表: 然后在网页中,如下图所示,通过增加.编辑.删除按钮能为这个表格控

可以导入导出到Excel支持多表头多层显示的表格控件Essential Grid

Essential Grid for Windows Forms是一款功能强大的表格控件,很多功能和Excel表格相似,具有15种单元格类型,可以导入导出到Excel,支持多表头,多层显示,合并单元格,插入计算公式,支持LINQ,过滤和分组等. 具体功能: 支持Banner Cells,可以联合背景和邻近的单元格来显示一个背景图像或图片 支持完全自定义单元格样式 支持多个单元格覆盖合并 可以冻结行和列 表格控件支持MS Office 2003, MS Office 2007 和 Vista 样式

Essential Grid for ASP.NET MVC表格控件详细介绍及下载

Essential Grid for ASP.NET MVC是一款轻量级的,支持AJAX的,高性能的表格控件,完全支持ASP.NET MVC框架,具有丰富的功能,包含分组.排序.翻页.数据绑定.编辑.过滤.多种内嵌皮肤,可以处理上亿的数据量. 具体功能: 支持对一列或多列数据进行分组 支持单行.列.多行选择 支持通过拖拉操作调整列大小.改变列位置 支持Unbound列 当表格数据有几页时,控件提供了一个页导航条,可用于定位某页或是翻页 支持过滤操作 支持绑定到复杂的数据对象 支持导出数据到Exc

DevExpress控件学习总结(转)

DevExpress控件学习总结 1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们需要把一个不可见的控件(component)BarManager(Navigation&Layout)拖放到这个窗体或用户控件上.这个控件维护工具条在窗体上的布局,处理用户的行为(processes an end-user's actions),提供一些定制功能等等.

WP8.1学习系列(第十一章)——中心控件Hub开发指南

在本文中 先决条件 什么是中心控件? 添加中心控件 将分区添加到中心 添加交互式分区头用于导航 将展示磁贴添加到中心 使用窄应用中的垂直中心 借助中心使用语义式缩放视图 摘要和后续步骤 重要的 API Hub HubSection SemanticZoom 使用 Hub 控件创建一个进入应用的入口页.Hub 控件在丰富的平移视图中显示内容,这样用户一眼就能看见新鲜有趣的内容,从而吸引他们深入了解你的应用中的更多内容. 先决条件 查看并了解 Windows 导航模式. 查看并了解中心控件指南. 我

ExtJS4.2学习(10)分组表格控件--GroupingGrid(转)

鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-17/179.html --------------------------------------------------------------------------------------------- 分组表格控件在我们的开发中经常被用到,GroupingGrid分组表格就是在普通表格的基础上,根据某一列的数据显示表格中的数据分组的表格控

DevExpress控件学习总结

1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们 需要把一个不可见的控件(component)BarManager(Navigation&Layout)拖放到这个窗体或用户控件上.这个控 件维护工具条在窗体上的布局,处理用户的行为(processes an end-user's actions),提供一些定制功能等等.这个控件维护 工具条.工具条项