wxPython电子表格功能wx.grid实例教程
本文实例为大家分享了wxPython电子表格功能的具体代码,供大家参考,具体内容如下
#!/usr/bin/envpython
#encoding:utf8
importwx
importwx.gridasgridlib
#importwx.lib.mixins.gridasmixins
#---------------------------------------------------------------------------
classSimpleGrid(gridlib.Grid):##,mixins.GridAutoEditMixin):
def__init__(self,parent,log):
gridlib.Grid.__init__(self,parent,-1)
##mixins.GridAutoEditMixin.__init__(self)
#打印log信息
self.log=log
self.moveTo=None
self.Bind(wx.EVT_IDLE,self.OnIdle)
#创建一个25X25的电子表格
self.CreateGrid(25,25)#,gridlib.Grid.SelectRows)
##self.EnableEditing(False)
#simplecellformatting
#设置第index=3列的宽度大小,像素=200
self.SetColSize(col=3,width=200)
#设置第index=4行的高度大小,像素=45
self.SetRowSize(4,45)
#设置row=0,col=0,value="Firstcell"
self.SetCellValue(0,0,"Firstcell")
#设置row=1,col=1,value="Anothercell"
self.SetCellValue(1,1,"Anothercell")
#设置row=2,col=2,value="Yetanothercell"
self.SetCellValue(2,2,"Yetanothercell")
#设置row=3,col=3,value="Thiscellisread-only"
self.SetCellValue(3,3,"Thiscellisread-only")
#设置字体格式
self.SetCellFont(0,0,wx.Font(12,wx.FONTFAMILY_ROMAN,wx.FONTSTYLE_ITALIC,wx.FONTWEIGHT_NORMAL))
#设置字体颜色
self.SetCellTextColour(1,1,wx.RED)
#设置cell背景颜色
self.SetCellBackgroundColour(2,2,wx.CYAN)
#设置只读属性
self.SetReadOnly(3,3,True)
#设置row=5,col=0,数字编辑器
self.SetCellEditor(5,0,gridlib.GridCellNumberEditor(1,1000))
#设置row=5,col=0,value="123"
self.SetCellValue(5,0,"123")
#设置row=6,col=0,浮点数
self.SetCellEditor(6,0,gridlib.GridCellFloatEditor())
#设置row=6,col=0,value="123.34"
self.SetCellValue(6,0,"123.34")
#设置
self.SetCellEditor(7,0,gridlib.GridCellNumberEditor())
#设置row=6,col=3,value="Youcanvetoeditingthiscell"
self.SetCellValue(6,3,"Youcanvetoeditingthiscell")
#self.SetRowLabelSize(0)
#self.SetColLabelSize(0)
#attributeobjectsletyoukeepasetofformattingvalues
#inonespot,andreusethemifneeded
#wx.grid.GridCellAttr
#这个类可以用来通过改变它们的默认属性来改变网格在网格中的外观。
attr=gridlib.GridCellAttr()
#字体颜色:黑色
attr.SetTextColour(wx.BLACK)
#设置背景颜色:红色
attr.SetBackgroundColour(wx.RED)
#设置字体格式
attr.SetFont(wx.Font(10,wx.FONTFAMILY_SWISS,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD))
#youcansetcellattributesforthewholerow(orcolumn)
#设置Row=5,attr
self.SetRowAttr(5,attr)
#设置Col=0,LableValue=Custom
self.SetColLabelValue(0,"Custom")
#设置Col=1,LabelValue="column"
self.SetColLabelValue(1,"column")
#设置Col=2,LabelValue=labels
self.SetColLabelValue(2,"labels")
#设置列表标签左右以及上下对齐方式:左对齐,下沉
self.SetColLabelAlignment(wx.ALIGN_LEFT,wx.ALIGN_BOTTOM)
#self.SetDefaultCellOverflow(False)
#r=gridlib.GridCellAutoWrapStringRenderer()
#self.SetCellRenderer(9,1,r)
#overflowcells
self.SetCellValue(9,1,"Thisdefaultcellwilloverflowintoneighboringcells,butnotifyouturnoverflowoff.");
#单元格合并处理:3x3
self.SetCellSize(11,1,3,3);
#设置单元格对齐方式:中间,中间
self.SetCellAlignment(11,1,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE);
#设置单元格值
self.SetCellValue(11,1,"Thiscellissettospan3rowsand3columns");
#设置
editor=gridlib.GridCellTextEditor()
#值长度
editor.SetParameters('10')
#设置格式
self.SetCellEditor(0,4,editor)
#设置值
self.SetCellValue(0,4,"Limitedtext")
#可以用来格式化单元格中的字符串数据。
renderer=gridlib.GridCellAutoWrapStringRenderer()
self.SetCellRenderer(15,0,renderer)
self.SetCellValue(15,0,"Thetextinthiscellwillberenderedwithword-wrapping")
#testalltheevents
#左单击
self.Bind(gridlib.EVT_GRID_CELL_LEFT_CLICK,self.OnCellLeftClick)
#右单击
self.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK,self.OnCellRightClick)
#左双击
self.Bind(gridlib.EVT_GRID_CELL_LEFT_DCLICK,self.OnCellLeftDClick)
#右双击
self.Bind(gridlib.EVT_GRID_CELL_RIGHT_DCLICK,self.OnCellRightDClick)
#label左单击
self.Bind(gridlib.EVT_GRID_LABEL_LEFT_CLICK,self.OnLabelLeftClick)
#label右单击
self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_CLICK,self.OnLabelRightClick)
#label左双击
self.Bind(gridlib.EVT_GRID_LABEL_LEFT_DCLICK,self.OnLabelLeftDClick)
#label右双击
self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_DCLICK,self.OnLabelRightDClick)
self.Bind(gridlib.EVT_GRID_COL_SORT,self.OnGridColSort)
#拖动Row大小
self.Bind(gridlib.EVT_GRID_ROW_SIZE,self.OnRowSize)
#拖动Col大小
self.Bind(gridlib.EVT_GRID_COL_SIZE,self.OnColSize)
self.Bind(gridlib.EVT_GRID_RANGE_SELECT,self.OnRangeSelect)
self.Bind(gridlib.EVT_GRID_CELL_CHANGED,self.OnCellChange)
self.Bind(gridlib.EVT_GRID_SELECT_CELL,self.OnSelectCell)
self.Bind(gridlib.EVT_GRID_EDITOR_SHOWN,self.OnEditorShown)
self.Bind(gridlib.EVT_GRID_EDITOR_HIDDEN,self.OnEditorHidden)
self.Bind(gridlib.EVT_GRID_EDITOR_CREATED,self.OnEditorCreated)
defOnCellLeftClick(self,evt):
self.log.write("OnCellLeftClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnCellRightClick(self,evt):
self.log.write("OnCellRightClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnCellLeftDClick(self,evt):
self.log.write("OnCellLeftDClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnCellRightDClick(self,evt):
self.log.write("OnCellRightDClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnLabelLeftClick(self,evt):
self.log.write("OnLabelLeftClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnLabelRightClick(self,evt):
self.log.write("OnLabelRightClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnLabelLeftDClick(self,evt):
self.log.write("OnLabelLeftDClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnLabelRightDClick(self,evt):
self.log.write("OnLabelRightDClick:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnGridColSort(self,evt):
self.log.write("OnGridColSort:%s%s"%(evt.GetCol(),self.GetSortingColumn()))
self.SetSortingColumn(evt.GetCol())
defOnRowSize(self,evt):
self.log.write("OnRowSize:row%d,%s\n"%
(evt.GetRowOrCol(),evt.GetPosition()))
evt.Skip()
defOnColSize(self,evt):
self.log.write("OnColSize:col%d,%s\n"%
(evt.GetRowOrCol(),evt.GetPosition()))
evt.Skip()
defOnRangeSelect(self,evt):
ifevt.Selecting():
msg='Selected'
else:
msg='Deselected'
self.log.write("OnRangeSelect:%stop-left%s,bottom-right%s\n"%
(msg,evt.GetTopLeftCoords(),evt.GetBottomRightCoords()))
evt.Skip()
defOnCellChange(self,evt):
self.log.write("OnCellChange:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
#Showhowtostayinacellthathasbaddata.Wecan'tjust
#callSetGridCursorheresincewearenestedinsideonesoit
#won'thaveanyeffect.Instead,setcoordinatestomovetoin
#idletime.
value=self.GetCellValue(evt.GetRow(),evt.GetCol())
ifvalue=='nogood':
self.moveTo=evt.GetRow(),evt.GetCol()
defOnIdle(self,evt):
ifself.moveTo!=None:
self.SetGridCursor(self.moveTo[0],self.moveTo[1])
self.moveTo=None
evt.Skip()
defOnSelectCell(self,evt):
ifevt.Selecting():
msg='Selected'
else:
msg='Deselected'
self.log.write("OnSelectCell:%s(%d,%d)%s\n"%
(msg,evt.GetRow(),evt.GetCol(),evt.GetPosition()))
#Anotherwaytostayinacellthathasabadvalue...
row=self.GetGridCursorRow()
col=self.GetGridCursorCol()
ifself.IsCellEditControlEnabled():
self.HideCellEditControl()
self.DisableCellEditControl()
value=self.GetCellValue(row,col)
ifvalue=='nogood2':
return#cancelsthecellselection
evt.Skip()
defOnEditorShown(self,evt):
ifevt.GetRow()==6andevt.GetCol()==3and\
wx.MessageBox("Areyousureyouwishtoeditthiscell?",
"Checking",wx.YES_NO)==wx.NO:
evt.Veto()
return
self.log.write("OnEditorShown:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnEditorHidden(self,evt):
ifevt.GetRow()==6andevt.GetCol()==3and\
wx.MessageBox("Areyousureyouwishtofinisheditingthiscell?",
"Checking",wx.YES_NO)==wx.NO:
evt.Veto()
return
self.log.write("OnEditorHidden:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetPosition()))
evt.Skip()
defOnEditorCreated(self,evt):
self.log.write("OnEditorCreated:(%d,%d)%s\n"%
(evt.GetRow(),evt.GetCol(),evt.GetControl()))
#---------------------------------------------------------------------------
classTestFrame(wx.Frame):
def__init__(self,parent,log):
wx.Frame.__init__(self,parent,-1,"SimpleGridDemo",size=(640,640))
self.grid=SimpleGrid(self,log)
#---------------------------------------------------------------------------
if__name__=='__main__':
importsys
print("hhh!!!")
sys.stdout.write("hll"+"\n")
if(0):#thissectionismodifiedbytony
fromwx.lib.mixins.inspectionimportInspectableApp
app=InspectableApp(False)
else:
app=wx.App(False)
frame=TestFrame(None,sys.stdout)
if(0):#thissectionismodifiedbytony
print(sys.stdout)
print(type(sys.stdout))
frame.Show(True)
#importwx.lib.inspection
#wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
#---------------------------------------------------------------------------
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。