日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

wxpython wx listctrl_wxPython - ListCtrl列表排序

發(fā)布時間:2024/7/23 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wxpython wx listctrl_wxPython - ListCtrl列表排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

13.4.2?如何對列表排序?

在wxPython中有三個有用的方法可以對列表進行排序,在這一節(jié),我們將按照從易到難的順序來討論。

在創(chuàng)建的時候告訴列表去排序

對一個列表控件排序的最容易的方法,是在構(gòu)造函數(shù)中告訴該列表控件對項目進行排序。你可以通過使用樣式標記wx.LC_SORT_ASCENDING或wx.LC_SORT_DESCENDING來實現(xiàn)。這兩個標記導致了列表在初始顯示的時候被排序,并且在Windows上,當新的項目被添加時,依然遵循所樣式標記來排序。對于每個列表項的數(shù)據(jù)的排序,是基于其字符串文本的,只是簡單的對字符串進行比較。如果列表是報告模式的,則排序是基于每行的最左邊的列的字符串的。

基于數(shù)據(jù)而非所顯示的文本來排序

有時,你想根據(jù)其它方面而非列表標簽的字符串來對列表排序。在wxPython中,你可以做到這一點,但這是較為復雜的。首先,你需要為列表中的每個項目設置項目數(shù)據(jù),這通過使用SetItemData(item,?data)方法。參數(shù)item是項目在未排序的列表中的索引,參數(shù)data必須是一個整形或長整形的值(由于C++的數(shù)據(jù)類型的限制),這就有點限制了該機制的作用。如果要獲取某行的項目數(shù)據(jù),可以使用方法GetItemData(item)。

一旦你設置了項目數(shù)據(jù),你就可以使用方法SortItems(func)來排序項目。參數(shù)func是一個可調(diào)用的Python對象(函數(shù)),它需要兩個整數(shù)。func函數(shù)對兩個列表項目的數(shù)據(jù)進行比較——你不能得到行自身的引用。如果第一項比第二項大的話,函數(shù)將返回一個正整數(shù),如果第一項比第二項小的話,返回一個負值,如果相等則返回0。盡管實現(xiàn)這個函數(shù)的最顯而易見的方法是只對這兩個項目做一個數(shù)字的比較就可以了,但是這并不唯一的排序方法。比如,數(shù)據(jù)項可能是外部字典或列表中的一個關(guān)鍵字,與該關(guān)鍵字相應的是一個更復雜的數(shù)據(jù)項,這種情況下,你可以通過比較與該關(guān)鍵字相應的數(shù)據(jù)項來排序。

使用mixin類進行列排序

關(guān)于對一個列表控件進行排序的常見的情況是,讓用戶能夠通過在報告模式的列表的任一列上進行敲擊來根據(jù)該列進行排序。你可以使用SortItems()機制來實現(xiàn),但是它在保持到列的跟蹤方面有點復雜。幸運的是,一個名為ColumnSorterMixin的wxPython的mixin類可以為你處理這些信息,它位于wx.lib.mixins.listctrl模塊中。圖13.5顯示了使用該mixin類對列進行的排序。

聲明這個mixin就和Python中聲明任何其它的多重繼承一樣,如下所示:

import?wx.lib.mixins.listctrl?as?listmix

class?ListCtrlPanel(wx.Panel,?listmix.ColumnSorterMixin):

def?__init__(self,?parent,?log):

wx.Panel.__init__(self,?parent,?-1,?style=wx.WANTS_CHARS)

self.list?=?TestListCtrl(self,?tID)

self.itemDataMap?=?musicdata

listmix.ColumnSorterMixin.__init__(self,?3)

例13.4是圖13.5的例子代碼

例13.4 使用mixin對一個報告列表進行排序

#!/usr/bin/python

#-*-?encoding:UTF-8?-*-

import?wx

import?wx.lib.mixins.listctrl

import?sys,?glob,?random

import?data

class?DemoFrame(wx.Frame,?wx.lib.mixins.listctrl.ColumnSorterMixin):#多重繼承

def?__init__(self):

wx.Frame.__init__(self,?None,?-1,

"wx.ListCtrl?with?ColumnSorterMixin",

size=(600,400))

#?load?some?images?into?an?image?list

il?=?wx.ImageList(16,16,?True)

for?name?in?glob.glob("smicon??.png"):

bmp?=?wx.Bitmap(name,?wx.BITMAP_TYPE_PNG)

il_max?=?il.Add(bmp)

#?add?some?arrows?for?the?column?sorter

# 添加箭頭到圖像列表

self.up?=?il.AddWithColourMask(

wx.Bitmap("sm_up.bmp",?wx.BITMAP_TYPE_BMP),?"blue")

self.dn?=?il.AddWithColourMask(

wx.Bitmap("sm_down.bmp",?wx.BITMAP_TYPE_BMP),?"blue")

#?create?the?list?control

self.list?=?wx.ListCtrl(self,?-1,?style=wx.LC_REPORT)

#?assign?the?image?list?to?it

self.list.AssignImageList(il,?wx.IMAGE_LIST_SMALL)

#?Add?some?columns

for?col,?text?in?enumerate(data.columns):

self.list.InsertColumn(col,?text)

#?add?the?rows

# 創(chuàng)建數(shù)據(jù)映射

self.itemDataMap?=?{}

for?item?in?data.rows:

index?=?self.list.InsertStringItem(sys.maxint,?item[0])

for?col,?text?in?enumerate(item[1:]):

self.list.SetStringItem(index,?col+1,?text)

#?give?each?item?a?data?value,?and?map?it?back?to?the

#?item?values,?for?the?column?sorter

self.list.SetItemData(index,?index)# 關(guān)聯(lián)數(shù)據(jù)和映射

self.itemDataMap[index]?=?item

#?give?each?item?a?random?image

img?=?random.randint(0,?il_max)

self.list.SetItemImage(index,?img,?img)

#?set?the?width?of?the?columns?in?various?ways

self.list.SetColumnWidth(0,?120)

self.list.SetColumnWidth(1,?wx.LIST_AUTOSIZE)

self.list.SetColumnWidth(2,?wx.LIST_AUTOSIZE)

self.list.SetColumnWidth(3,?wx.LIST_AUTOSIZE_USEHEADER)

#?initialize?the?column?sorter

wx.lib.mixins.listctrl.ColumnSorterMixin.__init__(self,

len(data.columns))

def?GetListCtrl(self):

return?self.list

def?GetSortImages(self):

return?(self.dn,?self.up)

app?=?wx.PySimpleApp()

frame?=?DemoFrame()

frame.Show()

app.MainLoop()

為了使用該mixin工作,你需要執(zhí)行下面的東西:

1、擴展自ColumnSorterMixin的類(這里是DemoFrame)必須有一個名為GetListCtrl()的方法,它返回實際要被排序的列表控件。該方法被這個mixin用來得到控件的一個索引。 2、在擴展自ColumnSorterMixin的類(這里是DemoFrame)的__init__()方法中,在你調(diào)用ColumnSorterMixin的__init__()方法之前,你必須創(chuàng)建GetListCtrl()所要引用的列表控件。該mixin的__init__()方法要求一個代表列表控件中的列號的整數(shù)值。 3、你必須使用SetItemData()為列表中的每行設置一個唯一的數(shù)據(jù)值。 4、擴展自ColumnSorterMixin的類(這里是DemoFrame)必須有一個名為itemDataMap的屬性。該屬性必須是一個字典。字典中的關(guān)鍵性的東西是由SetItemData()設置的數(shù)據(jù)值。這些值是你想用來對每列進行排序的值的一個元組。(典型情況下,這些值將是每列中的文本)。按句話說,itemDataMap本質(zhì)上是將控件中的數(shù)據(jù)復制成另一種易于排序的形式。 在ColumnSorterMixin的通常用法中,你要么創(chuàng)建itemDataMap用來添加項目到你的列表控件,要么你首先創(chuàng)建itemDataMap,并用它來建造列表控件本身。 盡管配置可能有點復雜,但ColumnSorterMixin對于列的排序是一個不錯的選擇。

總結(jié)

以上是生活随笔為你收集整理的wxpython wx listctrl_wxPython - ListCtrl列表排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本不卡视频在线观看 | 精品人妻互换一区二区三区 | 成人在线免费高清视频 | 精品成人中文无码专区 | 在线亚洲不卡 | 一级特黄色片 | 奇米影视首页 | av在线不卡免费看 | 激情av小说| 天天摸天天干天天操 | 欧美在线视频第一页 | 亚洲欧美在线不卡 | 国产不雅视频 | 丁香色综合 | 亚洲精品久久久久久 | 青青草久久久 | 久久精品首页 | 国产成人中文字幕 | 婷婷午夜激情 | 国产乱码久久久久久 | 六月色| 国产偷国产偷av亚洲清高 | 亚洲黄色三级视频 | 在线视频麻豆 | 美国黄色一级毛片 | 久久久精品人妻无码专区 | 成人h视频在线观看 | 好吊操这里有精品 | 亚洲国产中文字幕 | 性色国产成人久久久精品 | 乱淫av| 欧美无极品 | 久久精品一级片 | www三级免费 | 日韩看片| 日韩黄色一级片 | 97香蕉久久超级碰碰高清版 | 免费九九视频 | 国产高清精品在线观看 | 国产又黄又嫩又滑又白 | 久热国产精品 | 国产综合精品久久久久成人影 | 亚洲一区二区自拍偷拍 | 欧美在线观看www | a网址| 91成人在线观看喷潮蘑菇 | 色阁av| 91亚洲精品久久久蜜桃网站 | 亚洲国产成人在线 | 亚洲加勒比 | 牛牛影视一区二区 | 黄色靠逼视频 | 99re在线观看 | 51精品| 久久精品毛片 | 国产一区二区三区精品在线 | 国产日韩欧美视频在线观看 | 久久美女精品 | 九九九九精品九九九九 | 色呦呦国产 | 免费看欧美一级特黄a大片 国产免费的av | 国产精品久久久久毛片 | 日韩欧美视频免费观看 | 国产高清精品在线观看 | 99热中文 | 波多野结衣办公室33分钟 | 奇米中文字幕 | 淫片一级国产 | www黄色com| 欧美一级一区二区三区 | 解开人妻的裙子猛烈进入 | 色婷婷综合成人av | 日本大尺度做爰呻吟舌吻 | 欧美一级高清片 | 午夜视频在线免费看 | 亚洲一区精品在线观看 | 成人爱爱网站 | 手机看片1024日韩 | 国产福利久久久 | 午夜视频网址 | 国产黄色片在线播放 | 国产免费av网址 | 蜜桃成人av | 午夜精品福利电影 | 人妻少妇久久中文字幕 | 夜夜嗨av禁果av粉嫩av懂色av | 成人手机视频 | 国产精品久久久久久久久久免费看 | 天天操天天曰 | 亚洲日本色 | 国产性猛交xxxx免费看久久 | 国产精成人 | 最新国产黄色网址 | 亚洲欧美精品suv | 91综合精品 | 成人国产av一区二区三区 | 公肉吊粗大爽色翁浪妇视频 | 亚洲色图在线视频 | 国产高潮久久久 |