wxPython – ListBox & ListCtrl类

wxPython – ListBox & ListCtrl类

一个wx.ListBox小组件呈现一个可垂直滚动的字符串列表。默认情况下,列表中的单个项目是可选择的。然而,它可以被定制为多选。

ListCtrl 小组件是一个高度增强的列表显示和选择工具。超过一列的列表可以在报告视图、列表视图或图标视图中显示。

ListBox构造函数有如下定义

Wx.ListBox(parent, id, pos, size, choices, style)

选择参数是用于填充列表的字符串的列表。

wx.ListBox对象可通过以下风格参数进行定制—

下面给出的是wx.ListBox最常用的参数 S.N. 参数和描述
1 wxLB_SINGLE 单选列表
2 wxLB_MULTIPLE 多选列表:用户可以切换多个项目的开与关
3 wxLB_EXTENDED 扩展选择列表 – 用户可以通过使用SHIFT或CTRL键加上光标移动键或鼠标来扩展选择。
4 wxLB_HSCROLL 如果内容太宽,创建水平滚动条
5 wxLB_ALWAYS_SB 总是显示一个垂直滚动条
6 wxLB_NEEDED_SB 只在需要时创建一个垂直滚动条
7 wxLB_SORT 列表框内容按字母顺序排序

wx.ListBox类的方法 –

下面给出的是wx.ListBox最常用的方法 S.N. 方法和描述
1 DeSelect() 取消选择列表框中的一个项目
2 InsertItem() 在指定位置插入一个给定的字符串。
3 SetFirstItem() 在给定的索引处设置一个字符串为列表中的第一个。
4 IsSorted() 如果使用wxzL?B_SORT风格,则返回true。
5 GetString() 返回选定索引处的字符串
6 SetString() 为给定索引的项目设置标签

EVT_LISTBOX绑定器在列表中的一个项目被选中时,或当选择以编程方式改变时,会触发处理程序。EVT_LISTBOX_DCLICK绑定的处理程序函数在列表框项目上发生双击事件时被调用。

例子

在下面的例子中,一个 ListBox 控件和一个 TextCtrl 对象分别被放置在一个水平框尺的左边和右边部分。列表框由languages[] 列表对象中的字符串填充。

languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript','PHP','VB.NET','C#'] 
self.text = wx.TextCtrl(panel,style = wx.TE_MULTILINE) 
lst = wx.ListBox(panel, size = (100,-1), choices = languages, style = wx.LB_SINGLE)

两个物体被放置在一个水平的箱体中。

box = wx.BoxSizer(wx.HORIZONTAL) 
box.Add(lst,0,wx.EXPAND) 
box.Add(self.text, 1, wx.EXPAND)

ListBox控件通过EVT_LISTBOX绑定器与onListBox()处理程序相连。

self.Bind(wx.EVT_LISTBOX, self.onListBox, lst)

处理程序将选定的字符串追加到右边的多行TextCtrl中。

def onListBox(self, event): 
   self.text.AppendText( "Current selection: "+ 
      event.GetEventObject().GetStringSelection() + "\n")

完整的代码如下-

import wx 
class Mywin(wx.Frame): 

   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title,size = (350,300))

      panel = wx.Panel(self) 
      box = wx.BoxSizer(wx.HORIZONTAL) 

      self.text = wx.TextCtrl(panel,style = wx.TE_MULTILINE) 

      languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript', 'PHP', 'VB.NET','C#']   
      lst = wx.ListBox(panel, size = (100,-1), choices = languages, style = wx.LB_SINGLE)

      box.Add(lst,0,wx.EXPAND) 
      box.Add(self.text, 1, wx.EXPAND) 

      panel.SetSizer(box) 
      panel.Fit() 

      self.Centre() 
      self.Bind(wx.EVT_LISTBOX, self.onListBox, lst) 
      self.Show(True)  

   def onListBox(self, event): 
      self.text.AppendText( "Current selection: 
         "+event.GetEventObject().GetStringSelection()+"\n")

ex = wx.App() 
Mywin(None,'ListBox Demo') 
ex.MainLoop()

上述代码产生了以下输出 —

wxPython - ListBox & ListCtrl类

wx.ListCtrl 是一个增强的,因此也是更复杂的部件。ListBox只显示一列,而ListCtrl可以包含多列。ListCtrl 小组件的外观由以下样式参数控制-

下面是 Wx.ListCtrl最常用的

序号 参数和说明
1 wx.LC_LIST 多列列表视图,可选择小图标。
2 wx.LC_REPORT 单列或多列报告视图,可选标题
3 wx.LC_VIRTUAL 应用程序根据需要提供项目文本。只能与wxLC_REPORT一起使用
4 wx.LC_ICON 大图标视图,可选标签
5 wx.LC_SMALL_ICON 小图标视图,可选标签
6 wx.LC_ALIGN_LEFT 图标向左对齐
7 wx.LC_EDIT_LABELS 标签可编辑 – 编辑开始时应用程序将被通知
8 **wx.LC_NO_HEADER ** 在报告模式下没有页眉
9 **wx.LC_SORT_ASCENDING ** 按升序排序
10 wx.LC_SORT_DESCENDING 按降序排序
11 wx.LC_HRULES 在报告模式下,在行与行之间绘制浅色的水平规则
12 wx.LC_VRULES 在报告模式下,在列之间绘制浅色的垂直规则

例子

在下面的例子中,在报告视图中构建了一个 ListCtrl 小组件。

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

标题列是由InsertColumn()方法创建的,该方法接受列号、标题、样式和宽度参数。

self.list.InsertColumn(0, 'name', width = 100) 
self.list.InsertColumn(1, 'runs', wx.LIST_FORMAT_RIGHT, 100) 
self.list.InsertColumn(2, 'wkts', wx.LIST_FORMAT_RIGHT, 100)

一个图元的列表,每个图元包含三个字符串,称为 players[] ,存储数据,用于填充 ListCtrl 对象的列。

新行以 InsertStringItem() 方法开始,该方法返回当前行的索引。使用sys.maxint可以得到最后一行之后的行数。使用该索引,其他列由SetStringItem()方法填充。

for i in players: 
   index = self.list.InsertStringItem(sys.maxint, i[0]) 
   self.list.SetStringItem(index, 1, i[1]) 
   self.list.SetStringItem(index, 2, i[2])

该例子的完整代码是–

import sys 
import wx  

players = [('Tendulkar', '15000', '100'), ('Dravid', '14000', '1'), 
   ('Kumble', '1000', '700'), ('KapilDev', '5000', '400'), 
   ('Ganguly', '8000', '50')] 

class Mywin(wx.Frame): 

   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title) 

      panel = wx.Panel(self) 
      box = wx.BoxSizer(wx.HORIZONTAL)

      self.list = wx.ListCtrl(panel, -1, style = wx.LC_REPORT) 
      self.list.InsertColumn(0, 'name', width = 100) 
      self.list.InsertColumn(1, 'runs', wx.LIST_FORMAT_RIGHT, 100) 
      self.list.InsertColumn(2, 'wkts', wx.LIST_FORMAT_RIGHT, 100) 

      for i in players: 
         index = self.list.InsertStringItem(sys.maxint, i[0]) 
         self.list.SetStringItem(index, 1, i[1]) 
         self.list.SetStringItem(index, 2, i[2]) 

      box.Add(self.list,1,wx.EXPAND) 
      panel.SetSizer(box) 
      panel.Fit() 
      self.Centre() 

      self.Show(True)  

ex = wx.App() 
Mywin(None,'ListCtrl Demo') 
ex.MainLoop()

上述代码产生以下输出。球员的数据显示在报告视图中 –

wxPython - ListBox & ListCtrl类

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程