列表组件wx.ListCtrl ,是一列条目的图形展示组件,可以同时展示多列数据,是一个非常常见和有用的窗口组件,它的三种不同使用格式,可以通过style进行指定,分别是报告视图wx.LC_REPORT、图标视图wx.LC_ICON和默认的列表视图wx.LC_LIST。
程序清单:list.py
import wx
import sys
# 继承Frame
class ListControl(wx.Frame):
data = [("1949", "四月", "119"), ("1949", "五月", "104"),
("1949", "六月", "118"), ("1950", "四月", "133"),
("1950", "五月", "114"), ("1950", "六月", "140"),
("1951", "一月", "145"), ("1951", "三月", "178"),
("1951", "四月", "163"), ("1951", "五月", "172")]
def __init__(self, *args, **kwargs):
super(ListControl, self).__init__(*args, **kwargs)
# 初始化窗口UI
self.init_ui()
def init_ui(self):
# 面板
panel = wx.Panel(self)
# 多项列表
list_ctrl = wx.ListCtrl(panel, id=wx.ID_ANY, size=(900, 500),
style=wx.LC_REPORT)
list_ctrl.InsertColumn(0, "年份", width=100)
list_ctrl.InsertColumn(1, "月份", width=100)
list_ctrl.InsertColumn(2, "飞行次数", wx.LIST_FORMAT_RIGHT, 120)
for i in self.data:
index = list_ctrl.InsertItem(sys.maxsize, i[0])
list_ctrl.SetItem(index, 1, i[1])
list_ctrl.SetItem(index, 2, i[2])
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.select_item, list_ctrl)
self.SetSize(900, 500)
self.SetTitle("列表的应用")
self.Centre()
self.Show(True)
def select_item(self, e):
list_ctrl = e.GetEventObject()
index = e.GetIndex()
# 选中所在行的数据
col1 = list_ctrl.GetItemText(index, 0)
col2 = list_ctrl.GetItemText(index, 1)
col3 = list_ctrl.GetItemText(index, 2)
print(col1, col2, col3)
def main():
app = wx.App(False)
ListControl(None)
app.MainLoop()
if __name__ == "__main__":
main()
运行程序之后,弹出的窗口如下:
用InsertColumn(col, heading, format=LIST_FORMAT_LEFT, width=LIST_AUTOSIZE)方法,可以单独控制每一列的宽度和格式,col指定列下标(从0开始);heading列的字符串内容,format内容对齐格式,默认为左对齐wx.LIST_FORMAT_LEFT,居中对齐为wx.LIST_
FORMAT_CENTER,居右对齐为wx.LIST_FORMAT_RIGHT;width指定列的宽度。
将数据插入到wx.ListCtrl中去,对每一行,调用InsertItem(index, label)方法,index为行号,label为字符串内容,使用sys.maxsize可以保证每次调用时插入的行在上次插入行之后,该方法返回行的索引值。通过SetItem(index, column, label , imageId=-1)方法可以在当前行的后续列中插入数据,index为行数,column为列的下标,label是字符串内容。
好了,高级组件之多项列表的内容就说到这了,关注我,下一节更精彩。
码字不易,你的关注和转发是对我最大的鼓励,谢谢!
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!