- 浏览: 116379 次
文章分类
最新评论
-
myisland:
可以运行!一开始还以为要用本身就是透明背景的png呢,原来不是 ...
在CodeBlocks中用wxWidgets创建不规则窗口 -
lonerzf:
可以的。感谢。但是还有个问题,工程建立的时候有Configur ...
在CodeBlocks中用wxWidgets创建不规则窗口 -
鸵鸟大仙:
麻烦请问一下怎么在wxwidgets中加载msword.olb ...
利用wxwidgets操纵word -
dqifa:
Rat_boy 写道我现在也在做wxWidgets操作Word ...
利用wxwidgets操纵word -
Rat_boy:
我现在也在做wxWidgets操作Word的功能 但是搞了好久 ...
利用wxwidgets操纵word
# -*- 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()
from:http://hi.baidu.com/wxpythondk/blog/item/b881426121b12842eaf8f84b.html
发表评论
-
python之os.walk()与os.path.walk()
2014-02-18 19:58 1229os.walk() 函数声明:walk(top,topdo ... -
静态编译python为静态库并嵌入到C++中
2014-02-08 20:01 6242静态编译python为静态库 ... -
求最长非连续公共子串算法LCS
2012-06-30 14:00 930python 求最长非连续公共子串算法LCS 动态规划求最长 ... -
字符串相似性算法【最长公共字符串算法】 【LCS】
2012-06-30 13:41 1249#!/user/bin/env python # -*- ... -
python目录与文件操作
2012-06-13 10:50 984python:目录与文件操作os和os.path模块os.li ... -
python 打开sqlite3内存数据库,操作完毕将数据保存到文件数据库
2012-06-07 15:19 5765#encoding=utf-8 # 甄码农代码 2012 0 ... -
一个使用pysqlite2的数据库备份小程序
2012-06-06 16:42 1044这是我写的一个使用 pysqlite2 写的数据库备份的小程序 ... -
Dynamic list updating with a GridCellChoiceEditor
2012-06-06 10:38 1546A common question is how to dyn ... -
一个文本折行的模块
2012-06-04 07:51 858今天开发了一个wraptext ... -
Python中的*args和**kwargs
2012-05-31 16:07 902先来看个例子: def foo(*args, **kwar ... -
在wxGrid中增加wxDataPickerCtrl控件
2012-05-26 17:18 2114编写环境: 1、ActivePython-2.7.2.5-w ... -
python 调用IEHtmlWindow打印网页
2012-05-26 17:00 2999编写环境: 1、ActivePython-2.7.2.5-w ...
相关推荐
在本教程中,我们将深入探讨如何使用wxPython库中的`wx.grid`模块来创建和操作电子表格。`wxPython`是Python中一个流行的GUI(图形用户界面)工具包,而`wx.grid`提供了用于构建电子表格组件的功能。下面将详细介绍`...
wxPython2.8.12.1的Linux版本,需要在Linux版本上安装的可以试一下。
wxPython demo 4.2 应用示例 pip install wxpython==4.2 cd \Python37\Scripts wxdemo.exe 下载 wxPython-demo-4.2.0.tar.gz
通过`wxPython-4.0.7.post2`,开发者或测试工程师可以确保他们正在使用的`wxPython`版本与`Robot Framework`中的`wxRobot`库兼容,从而高效地进行GUI测试。 **核心特性** `wxPython`提供了大量组件,如按钮、...
### wxPython中的ListCtrl控件详解 #### 一、引言 `ListCtrl`是wxPython库中的一个重要组件,用于创建列表控件。它可以展示多种类型的列表格式,如单列表、报表、带图片的列表等,并且具备强大的自定义功能。本文将...
6. **国际化和本地化**: wxPython支持多语言应用,通过`wx.Locale`和`wx.MessageDialog`可以轻松实现。 **使用API参考手册** 手册中的每个类都详细列出了其构造函数、方法、属性和常量。例如,`wx.Frame`类是顶级...
在wxPython中,`wx.grid`模块提供了GridTableBase和Grid类,用于展示和操作表格数据。GridTableBase是一个抽象基类,定义了表格的数据模型,而Grid类则负责显示表格并处理用户交互。 3. **自定义表格模型** 要...
在Python编程中,GUI(图形用户界面)是一个重要的部分,特别是在需要与用户进行交互的应用...对于更深入的学习,可以参考提供的相关链接,这些链接包含更多WxPython的使用方法和实例,涵盖从基础到高级的各种主题。
**wxPython-demo-4.0.6官方demo**是一个用于学习和探索wxPython库的资源包,其中包含了大量示例代码,旨在帮助开发者理解和运用wxPython进行GUI(图形用户界面)编程。wxPython是一个跨平台的GUI工具包,它允许...
本文将深入探讨如何使用wxPython中的wx.ListBox类来创建和管理列表框。 列表框是一种用户界面元素,允许用户从一组预定义的选项中进行选择。在wxPython中,wx.ListBox是用来创建列表框的类。下面我们将详细讲解如何...
在Python的GUI编程中,wxPython是一个非常流行的库,它为开发者提供了丰富的界面组件和工具,使得创建桌面应用程序变得简单。本项目聚焦于利用wxPython设计一个日历控件,这个控件允许用户选择日期,并能打印所选...
wxPython2.8 是 Python 窗口显示的框架,很多软件需要通过该框架提供窗口显示、操作等功能。
【wxPython】是一个基于Python语言的图形用户界面(GUI)工具包,它使用原生的窗口系统来构建应用程序,提供了一种跨平台的方式来创建桌面应用。wxPython是wxWidgets库的Python绑定,允许开发者利用其丰富的组件库和...
通过学习这个压缩包中的内容,开发者可以深入理解wxPython的工作原理,熟悉控件的使用方式,掌握如何设计用户界面,以及如何处理用户交互事件。这对于那些希望利用Python进行桌面应用开发的人来说是非常有价值的资源...
2. **创建面板和工具栏**:工具栏通常是一个独立的 `wx.Panel`,在其上可以添加多个按钮或其他控制项,提供用户常用功能。3. **设置停靠和浮动特性**:通过管理器的方法,可以定义工具栏的行为。例如,可以选择将其...
**使用wxPython**时,你需要导入相应的模块,比如`wx`,然后创建应用程序实例,定义窗口布局和事件处理。以下是一个简单的示例: ```python import wx class MyFrame(wx.Frame): def __init__(self, parent, ...
wxPython是Python编程语言中一个强大的GUI(图形用户界面)工具包,它使得开发者可以使用Python编写出具有本地外观和感觉的应用程序。wxPython是基于C++的wxWidgets库的Python绑定,提供了丰富的控件集合,使得...
因此,使用wxPython进行GUI开发时,开发者可以充分利用Python的面向对象特性,不必因为选择Python而放弃对面向对象编程的享受。 【基础代码示例】清单1展示了一个简单的wxPython应用代码片段: 1. 首先,导入了...