geekdoc-python-zh/docs/pythonlibrary/wxpython-an-intro-to-the-ul...

6.5 KiB
Raw Permalink Blame History

wxPython:UltimateListCtrl 简介

原文:https://www.blog.pythonlibrary.org/2011/11/02/wxpython-an-intro-to-the-ultimatelistctrl/

wxPython 中包含的一个新的 agw 小部件叫做 UltimateListCtrl。这是一个纯 Python 小部件,几乎可以将任何其他小部件嵌入到任何单元格中,这使得它非常灵活。它还允许熟练的程序员添加自定义渲染器,使界面与众不同。在本文中,我们将快速浏览一下这个迷人的小部件。

入门指南

学习一个新的小部件最简单的方法是看一个例子。如果您想查看这个令人敬畏的小部件的几个复杂演示,可以查看 2.9 系列的 wxPython 演示,但是出于我们的目的,我们将创建一个基于其中一个演示的精简版本,即报告视图版本。这是让你享受观赏乐趣的代码:


import wx
from wx.lib.agw import ultimatelistctrl as ULC

########################################################################
class TestPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        try:
            font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
            boldfont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
        except AttributeError:
            # wxPython 4 / Phoenix updated SystemSettings
            font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
            boldfont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)

        boldfont.SetWeight(wx.BOLD)
        boldfont.SetPointSize(12)

        self.ultimateList = ULC.UltimateListCtrl(self, agwStyle = wx.LC_REPORT 
                                         | wx.LC_VRULES
                                         | wx.LC_HRULES)

        info = ULC.UltimateListItem()
        info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_CHECK
        info._image = []
        info._format = 0
        info._kind = 1
        info._text = "Artist Name"
        self.ultimateList.InsertColumnInfo(0, info)

        info = ULC.UltimateListItem()
        info._format = wx.LIST_FORMAT_RIGHT
        info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT
        info._image = []
        info._text = "Title"
        info._font = boldfont
        self.ultimateList.InsertColumnInfo(1, info)

        info = ULC.UltimateListItem()
        info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT
        info._format = 0
        info._text = "Genre"
        info._font = font
        info._image = []
        self.ultimateList.InsertColumnInfo(2, info)

        self.ultimateList.InsertStringItem(0, "Newsboys")
        self.ultimateList.SetStringItem(0, 1, "Go")
        self.ultimateList.SetStringItem(0, 2, "Rock")

        self.ultimateList.InsertStringItem(1, "Puffy")
        self.ultimateList.SetStringItem(1, 1, "Bring It!")
        self.ultimateList.SetStringItem(1, 2, "Pop")

        self.ultimateList.InsertStringItem(2, "Family Force 5")
        self.ultimateList.SetStringItem(2, 1, "III")
        self.ultimateList.SetStringItem(2, 2, "Crunk")

        self.ultimateList.SetColumnWidth(0, 150)
        self.ultimateList.SetColumnWidth(1, 200)
        self.ultimateList.SetColumnWidth(2, 100)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.ultimateList, 1, wx.EXPAND)
        self.SetSizer(sizer)

########################################################################
class TestFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="MvP UltimateListCtrl Demo")
        panel = TestPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = TestFrame()
    app.MainLoop()

让我们花点时间来分解一下。首先,要导入这个小部件,我们需要做如下事情:从 wx.lib.agw 导入 ultimatelistctrl 作为 ULC 。然后为了实例化它,我们称为 ULC。UltimateListCtrl() 并给它传递几个键值。在本例中,我们传入一个父类和三个样式:wx。LC_REPORTwx。LC_VRULES 和 wx。LC_HRULES。第一个 agwStyle 是 LC_REPORT它将小部件置于“报告”模式这可能是 ListCtrl 最常见的模式,也是最有用的模式之一。另外两种样式分别放入垂直线和水平线。

接下来,我们想要创建我们的列。我们用 ULC。虽然根据文档这也可以用来创建“项目”。如您所见UltimateListItem 有许多我们可以设置的属性。你可以添加一个图像,一个复选框(通过面具和风格:ULC。ULC _ 掩码 _ 检查),一种(0 -正常1 -复选框2 -单选按钮),一种格式(控制标签定位),字体和文本和其他几个。一旦你设置好了这些东西,你可以调用 UltimateListItem 对象的 InsertColumnInfo() 方法来应用你的设置。

最后,为了向 UltimateListCtrl 添加数据,我们做了与普通 ListCtrl 相同的事情。也就是说,我们首先调用 InsertStringItem(indexlabel) 其中 index 是行号。然后要向其他列添加字符串,您需要调用 SetStringItem(indexcollabel) 。您可以调用许多其他方法来添加其他类型的数据,但是您需要阅读演示的源代码或文档来了解这一点。现在我们完成了我们的第一个演示!

包扎

在官方的 wxPython 2.9 系列演示中可以找到更多的信息。事实上,有几个演示展示了这个小部件可以做的各种风格和 UI 变化。您可以在本文开头的截图中看到其中一个演示的例子。每当您需要将其他小部件插入 ListCtrl 的单元格时,或者每当您需要对小部件的表示进行大量控制时,我都会推荐这个小部件。黑客快乐!

进一步阅读