python 总结

来源:互联网 发布:数据库日志恢复 编辑:程序博客网 时间:2024/04/28 04:17

1、编码问题

参考之前转载的文章,一开始用wxtextctrl::.GetValue()方法默认返回中文文本显示各种乱码问题,干脆一点,直接改默认编码gbk,世界清静了!!

import sys reload(sys) sys.setdefaultencoding('gbk')

不知道是之前那边文章有问题,总之改默认为utf8依然各种编码问题。

某大神的忠告:

把Unicode应用到实际中注意一下四点:
   1 程序中出现字符串时一定要加一个前缀u
   2 不要用str()函数,用Unicode()代替
   3 不要用过时的string模块。如果传给它非ASCII码,它会把一切搞砸。
   4 不到必须时不要在你的程序里编解码Unicode字符,只在你要写入文件或者数据库或者网络时,才调用encode()函数和decode()函数。


2、listctrl 问题汇总

1、获取当前选中行

参考 http://docs.wxwidgets.org/stable/wx_wxlistctrl.html#wxlistctrlgetnextitem 

wxlistctrlgetnextitem的文档,不要妄想去绑定鼠标事件,会跟

wx.lib.mixins.listctrl::TextEditMixin 类的鼠标事件冲突导致只有第一行可编辑

def dele(self):        self.item = -1        while True:            ## 获取选定item            self.item = self.GetNextItem(self.item, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED)            self.DeleteItem(self.item)            if self.item == -1:                break



2、 插入行 

配置了 wx.ListCtrl 部件,您可以使用 InsertStringItem 和 SetStringItem 方法向它填充数据了。wx.ListCtrl 部件中的每一个新行都必须使用 InsertStringItem 方法添加。两个强制性参数指定在何处执行插入,包含表示在列表顶部插入的值 0 和要插入在该位置的字符串。InsertStringItem 返回一个整数,表示插入字符串的行数。

pos = self.list.InsertStringItem(i,str(id))  #插入一行的第一列,返回当前行的index            self.list.SetStringItem(pos,1,dom.name())  #三个参数分别表示 第pos+1行 第1列插入 dom.name()            self.list.SetStringItem(pos,2,str(infos[0]))            self.list.SetStringItem(pos,3,str(infos[1]))            self.list.SetStringItem(pos,4,str(infos[3]))            self.list.SetStringItem(pos,5,str(infos[2]))


3、绑定标签切换

 self.nb.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self._onclick)


4、获取listctrl 的 cell text

首先想到这个方法:wxString wxListCtrl::GetItemText(long item,  int col = 0  ) const

Parameters:
itemItem (zero-based) index.colItem column (zero-based) index. Column 0 is the default. This parameter is new in wxWidgets 2.9.1. 
一看文档,坑爹,版本不够,参考http://wiki.wxwidgets.org/WxListCtrl#Get_the_String_Contents_of_a_.22cell.22_in_a_LC_REPORT_wxListCtrl
老老实实用GetItem()+GetText(),更坑爹的来了,不说了,都是眼泪,看代码吧,参数是亮点
temp_cell = wx.ListItem()            temp_cell.SetId(3)            #temp_cell.SetColumn(1)            a=self.page.GetItem(temp_cell.GetId(),1)            print a.GetText()


菜B的路上  待续……