wx.grid.Grid

时间:2022-09-10 17:32:37
# -*- coding: cp936 -*-
import wx
import wx.grid
import wx.lib.gridmovers as gridmovers import pymssql
connect=pymssql.connect(host='wxpython',user='sa',password='',database='THIS4_0807')
cursor=connect.cursor()
ascordesc=True class LineupTable(wx.grid.PyGridTableBase):
def __init__(self,data,fields):
wx.grid.PyGridTableBase.__init__(self)
self.data=data
self.fields=fields
## self.dataTypes = [wx.grid.GRID_VALUE_STRING,
## wx.grid.GRID_VALUE_STRING,
## #gridlib.GRID_VALUE_CHOICE + ':only in a million years!,wish list,minor,normal,major,critical',
## #gridlib.GRID_VALUE_NUMBER + ':1,5',
## #gridlib.GRID_VALUE_CHOICE + ':all,MSW,GTK,other',
## #gridlib.GRID_VALUE_BOOL,
## #gridlib.GRID_VALUE_BOOL,
## #gridlib.GRID_VALUE_BOOL,
## wx.grid.GRID_VALUE_FLOAT + ':6,2',
## ] #---Grid cell attributes self.odd = wx.grid.GridCellAttr()
self.odd.SetBackgroundColour("grey")
self.odd.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD)) self.even = wx.grid.GridCellAttr()
self.even.SetBackgroundColour("white")
self.even.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD)) #---Mandatory constructors for grid def GetNumberRows(self):
# if len(self.data)<10:
# rowcounts=10
#else:
#rowcounts=len(self.data)
return len(self.data) def GetNumberCols(self):
return len(self.fields) def GetColLabelValue(self, col):
return self.fields[col] def IsEmptyCell(self, row, col):
if self.data[row][col] == "" or self.data[row][col] is None:
return True
else:
return False # def GetValue(self, row, col):
# value = self.data[row][col]
# if value is not None:
# return value
# else:
# return ''
#
# def SetValue(self, row, col, value):
# #print col
# def innerSetValue(row, col, value):
# try:
# self.data[row][col] = value
# except IndexError:
# # add a new row
# self.data.append([''] * self.GetNumberCols())
# innerSetValue(row, col, value)
#
# # tell the grid we've added a row
# msg = gridlib.GridTableMessage(self, # The table
# gridlib.GRIDTABLE_NOTIFY_ROWS_APPENDED, # what we did to it
# 1 # how many
# )
#
# self.GetView().ProcessTableMessage(msg)
# innerSetValue(row, col, value) def GetValue(self, row, col):
#id = self.fields[col]
return self.data[row][col] def SetValue(self, row, col, value):
#id = self.fields[col]
self.data[row][col] = value #--------------------------------------------------
# Some optional methods # Called when the grid needs to display column labels
# def GetColLabelValue(self, col):
# #id = self.fields[col]
# return self.fields[col][0] def GetAttr(self, row, col, kind):
attr = [self.even, self.odd][row % 2]
attr.IncRef()
return attr def SortColumn(self, col,ascordesc):
"""
col -> sort the data based on the column indexed by col
"""
name = self.fields[col]
_data = [] for row in self.data:
#print row
#rowname, entry = row _data.append((row[col], row)) _data.sort(reverse=ascordesc)
self.data = [] for sortvalue, row in _data:
self.data.append(row) def AppendRow(self, row):#增加行
#print 'append'
entry = [] for name in self.fields:
entry.append('A') self.data.append(tuple(entry ))
return True def MoveColumn(self,frm,to):
grid = self.GetView() if grid:
# Move the identifiers
old = self.fields[frm]
del self.fields[frm] if to > frm:
self.fields.insert(to-1,old)
else:
self.fields.insert(to,old) print self.fields # Notify the grid
grid.BeginBatch() msg = wx.grid.GridTableMessage(
self, wx.grid.GRIDTABLE_NOTIFY_COLS_INSERTED, to, 1
)
grid.ProcessTableMessage(msg) msg = wx.grid.GridTableMessage(
self, wx.grid.GRIDTABLE_NOTIFY_COLS_DELETED, frm, 1
)
grid.ProcessTableMessage(msg) grid.EndBatch() # Move the row
def MoveRow(self,frm,to):
grid = self.GetView() if grid:
# Move the rowLabels and data rows
oldLabel = self.rowLabels[frm]
oldData = self.data[frm]
del self.rowLabels[frm]
del self.data[frm] if to > frm:
self.rowLabels.insert(to-1,oldLabel)
self.data.insert(to-1,oldData)
else:
self.rowLabels.insert(to,oldLabel)
self.data.insert(to,oldData) # Notify the grid
grid.BeginBatch() msg = wx.grid.GridTableMessage(
self, wx.grid.GRIDTABLE_NOTIFY_ROWS_INSERTED, to, 1
)
grid.ProcessTableMessage(msg) msg = wx.grid.GridTableMessage(
self, wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, frm, 1
)
grid.ProcessTableMessage(msg) grid.EndBatch() class DragableGrid(wx.grid.Grid):
def __init__(self, parent):
wx.grid.Grid.__init__(self, parent )
cursor.execute('select top 2 blh,hzxm,qrrq from JK_YSQR_DK ')
data = cursor.fetchall()
fields = [cursor.description[i][0] for i in range(len(cursor.description))] table = LineupTable(data,fields)
self.SetTable(table, True)
#table = LineupTable() # The second parameter means that the grid is to take ownership of the
# table and will destroy it when done. Otherwise you would need to keep
# a reference to it and call it's Destroy method later.
#self.SetTable(self.table, True) # Enable Column moving
gridmovers.GridColMover(self)
self.Bind(gridmovers.EVT_GRID_COL_MOVE, self.OnColMove, self) # Enable Row moving
gridmovers.GridRowMover(self)
self.Bind(gridmovers.EVT_GRID_ROW_MOVE, self.OnRowMove, self) # Event method called when a column move needs to take place
def OnColMove(self,evt):
frm = evt.GetMoveColumn() # Column being moved
to = evt.GetBeforeColumn() # Before which column to insert
self.GetTable().MoveColumn(frm,to) # Event method called when a row move needs to take place
def OnRowMove(self,evt):
frm = evt.GetMoveRow() # Row being moved
to = evt.GetBeforeRow() # Before which row to insert
self.GetTable().MoveRow(frm,to) class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, id=-1, title='wx.grid.PyGridTableBase',size=(900,600)) #---Panel #panel = wx.Panel(self, -1) #---Buttons self.btn_1hr = wx.Button(self, -1, "RUN", pos=(10, 10),size=(100,40))
self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn_1hr) self.btn_2hr = wx.Button(self, -1, "ADD", pos=(10, 35),size=(100,40))
self.Bind(wx.EVT_BUTTON, self.OnADD, self.btn_2hr)
self.btn_3hr = wx.Button(self, -1, "DELETE", pos=(10, 60),size=(100,40)) self.btn_4hr = wx.Button(self, -1, "INSERT", pos=(10, 85),size=(100,40)) box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.btn_1hr, 1, wx.EXPAND,5)
box.Add(self.btn_2hr, 1, wx.EXPAND,5)
box.Add(self.btn_3hr, 1, wx.EXPAND,5)
box.Add(self.btn_4hr, 1, wx.EXPAND,5) #---Grid self.grid =DragableGrid(self)#, pos=(140, 0), size=(900,400))
self.grid.SetRowLabelSize(40)#设置行标签的宽度
self.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK, self.OnLabelRightClick)
#self.Bind(wx.grid.EVT_GRID_RANGE_SELECT, self.OnRangeSelect)
box1 = wx.BoxSizer(wx.VERTICAL)
box1.Add(self.grid, 1, wx.GROW|wx.ALL)
cursor.execute('select top 2 blh,hzxm,qrrq from JK_YSQR_DK ')
data = cursor.fetchall()
fields = [cursor.description[i][0] for i in range(len(cursor.description))] self.table = LineupTable(data,fields)
self.grid.SetTable(self.table, True) #---Grid properties self.grid.EnableEditing(True)#是否可以编辑
self.grid.SetDefaultCellAlignment(wx.ALIGN_LEFT, wx.ALIGN_RIGHT)#设置CELL的文本对齐方式
self.grid.SetSelectionBackground('red')
self.grid.EnableDragColSize(enable=True)#控制列宽是否可以拉动
self.grid.EnableDragRowSize(enable=True)#控制行高是否可以拉动
self.grid.SetLabelBackgroundColour((100, 200, 150))
self.grid.SetLabelTextColour((255, 255, 255)) #---Column Sizes
self.grid.AdjustScrollbars()
self.grid.Refresh() Hbox = wx.BoxSizer(wx.HORIZONTAL)
Hbox.Add(box, 0, wx.EXPAND)
Hbox.Add(box1, 1, wx.EXPAND)
#Vbox = wx.BoxSizer(wx.VERTICAL)
#Vbox.Add(Hbox,0,wx.ALL|wx.EXPAND) self.SetSizer(Hbox)
#self.Fit()
#self.grid.AutoSize() #---Use below if want to size individual columns (index, size)
#---Also have SetRowSize
#grid.SetColSize(0, 150) def Reset(self):
"""reset the view based on the data in the table. Call
this when rows are added or destroyed"""
self.table.ResetView(self) def OnLabelRightClick(self, event):
global ascordesc,row, col #self.SetStatusText('You Have Right-Clicked On Label "%s"!' % event.GetString())
row, col = event.GetRow(), event.GetCol()
#print row, col
self.table.SortColumn(col,ascordesc)
if ascordesc:
ascordesc=False
else:
ascordesc=True self.grid.Refresh() def OnADD(self,event): #self.table.AppendRow(row)
#print (self.grid.SelectedRows)
self.table.AppendRow(row)
#self.grid.SetTable(self.table, True)
self.grid.ForceRefresh() def OnClick(self, event): cursor.execute('select top 5 id as "编码",name as "名称" ,cast(memo as numeric(12,2)) as "单价" from YY_SFDXMK where memo>0')
data1 = cursor.fetchall()
fields1 = [cursor.description[i][0] for i in range(len(cursor.description))] self.table = LineupTable(data1,fields1)
self.grid.SetTable(self.table, True)
self.grid.EnableDragColSize(enable=True)
self.grid.EnableDragRowSize(enable=True)
#self.grid.AutoSize()
self.grid.AdjustScrollbars()
#self.grid.ForceRefresh()
self.grid.Refresh() if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show()
app.MainLoop()

wx.grid.Grid的更多相关文章

  1. wxPython控件学习之wx&period;grid&period;Grid 表格控件

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

  2. Python Tkinter模块 Grid&lpar;grid&rpar;布局管理器参数详解

    在使用Tkinter模块编写图像界面时,经常用到pack()和grid()进行布局管理,pack()参数较少,使用方便,是最简单的布局,但是当控件数量较多时,可能需要使用grid()进行布局(不要在同 ...

  3. wx&period;grid

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

  4. wx&period;grid 简单例子

    import wx, wx.grid class GridData(wx.grid.PyGridTableBase): _cols = "a b c".split() _data ...

  5. 46-wxpython 4 使用 grid 展示表格

    转载:https://blog.csdn.net/soslinken/article/details/79024938#%E4%BD%BF%E7%94%A8%E6%A0%B7%E4%BE%8B wxp ...

  6. wxpython grid

    构建Grid方法,效果如下: 其它构建grid方法和grid的使用见:还可以见下载资源中的wxpython教程第5章的 gridGeneric.py gridModel.py gridNoModel. ...

  7. Grid 布局管理器

    Grid 布局管理器: Grid布局类wx.GridSizer,Grid布局以网格形式对子窗口或控件进行摆放,容器被分成大小相等的矩形,一个矩形中放置一个子窗口或控件. wx.GridSizer构造方 ...

  8. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  9. wpf 列表、菜单 收起与展开,通过Grid DoubleAnimation或者Expander实现

    菜单收缩有很多种方法具体如何实现还是看个人想法: 第一种通过后台控制收起与展开: 效果图: 代码 : <Grid> <Grid.ColumnDefinitions> <C ...

随机推荐

  1. Maven对插件进行全局设置

    并不是所有插件都适合从命令行配置,有些参数的值从项目创建到发布都不会改变,或者很少改变,对于这种情况,在POM文件中一次性配置就显然比重复在命令行中输入要方便了. 用户可以在生命插件的时候,对插件进行 ...

  2. linux 安装后

    docker https://cr.console.aliyun.com/#/accelerator pecl install xdebug xdebug.remote_enable = on php ...

  3. lol 正在刷leetcode

    letcode easy 刷了90%了 我要写个随笔庆祝下 挑着做的太不要脸了,接下来要做剩下的了 :) 剩下的决定直接参考答案了 :) 有些答案看着也好迷糊.水平太差了.(英文水平差,看不懂题目.. ...

  4. &period;NET Interop&period;SHDocVw和MSHTML引用如何操作

    Interop.SHDocVw:引用Com:Microsoft HTML Object Library 和 Microsoft Internet Controls MSHTML:引用-->COM ...

  5. Auto push git tag

    CALL "C:\Program Files\TortoiseGit\bin\pageant.exe" "d:\CKey.ppk" set GIT_SSH=C: ...

  6. homework-07

    终于等到了一次难度相对比较小的问题,只要读完提问题就好,但又不得不说自己真的很菜,且不说C++掌握的不好,连英文也比较差,导致读的非常吃力,不过我还是坚持读完了四篇英文文章,大致意思是可以了解的,但是 ...

  7. Python安装模块出错(ImportError&colon; No module named setuptools)解决方法

    原地址:http://www.cnblogs.com/BeginMan/archive/2013/05/28/3104928.html 在window平台下安装第三方模块时,出现这样的错误:

  8. Hibernate查询之Example查询

    org.hibernate.criterion.Example 类允许你通过一个给定实例构建一个条件查询. 此实例的属性值将做成查询条件. Cat cat = new Cat(); cat.setSe ...

  9. 积累的VC编程小技巧之工具条和状态条

    1.工具条和状态条中控件的添加: 方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上 ...

  10. 自动化部署之gitlab权限管理--issue管理

    一.删除测试项目 先进入项目,选择编辑项目 二.拉取到最下方,移除项目 三 输入你要删除的项目名称 二 创建Group,User,Project 2.1 创建一个组,组名为java Group pat ...

相关文章