使用任意 wx 对象作为 wx.ListCtrl 中的列

发布于 2024-10-28 12:33:20 字数 460 浏览 2 评论 0原文

我有一个设置了 wx.LC_REPORT 位的 wx.ListCtrl 。它有 3 列。我希望在第一列中为每个其他条目填充一个复选框。我尝试使用 ListCtrl.InsertItem 方法,但它只需要一个参数 (info),而且我找不到任何关于该参数需要是什么的文档。我尝试将 wx.CheckBox 传递给 InsertItem 但无济于事。

是否可以将复选框作为 wxPython ListCtrl 中的条目?如果是这样,我将如何去做呢?

如果我所说的内容有任何歧义,这是我想要的图片(不确定这是否是 wx,但这就是我正在寻找的)。我想要编号列中 1..5 旁边的复选框。

带有复选框的列表控件

I have a wx.ListCtrl that has the wx.LC_REPORT bit set. It has 3 columns. I want the first column to be populated with a check box for each other entry. I tried using the ListCtrl.InsertItem method, but it only takes one argument (info) and I can't find any docs as to what that argument needs to be. I've tried just passing a wx.CheckBox to InsertItem to no avail.

Is it possible to have a checkbox as an entry in a wxPython ListCtrl? If so, how would I go about doing that?

In case there's any ambiguity as to what I'm talking about, here's a picture of what I want (not sure if this is wx, but it's what I'm looking for). I want the checkboxes next to 1..5 in the No. column.

list control with checkboxes

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三寸金莲 2024-11-04 12:33:20

看看wx.lib.mixins.listctrl。

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

class TestListCtrl(wx.ListCtrl, listmix.CheckListCtrlMixin, listmix.ListCtrlAutoWidthMixin):
    def __init__(self, *args, **kwargs):
        wx.ListCtrl.__init__(self, *args, **kwargs)
        listmix.CheckListCtrlMixin.__init__(self)
        listmix.ListCtrlAutoWidthMixin.__init__(self)
        self.setResizeColumn(3)

    def OnCheckItem(self, index, flag):
        print(index, flag)

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = wx.Panel(self)
        self.list = TestListCtrl(self.panel, style=wx.LC_REPORT)
        self.list.InsertColumn(0, "No.")
        self.list.InsertColumn(1, "Progress")
        self.list.InsertColumn(2, "Description")
        self.list.Arrange()
        for i in range(1, 6):
            self.list.Append([str(i), "", "It's the %d item" % (i)])        
        self.button = wx.Button(self.panel, label="Test")
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.list, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
        self.sizer.Add(self.button, flag=wx.EXPAND | wx.ALL, border=5)
        self.panel.SetSizerAndFit(self.sizer)
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

Have a look at wx.lib.mixins.listctrl.

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

class TestListCtrl(wx.ListCtrl, listmix.CheckListCtrlMixin, listmix.ListCtrlAutoWidthMixin):
    def __init__(self, *args, **kwargs):
        wx.ListCtrl.__init__(self, *args, **kwargs)
        listmix.CheckListCtrlMixin.__init__(self)
        listmix.ListCtrlAutoWidthMixin.__init__(self)
        self.setResizeColumn(3)

    def OnCheckItem(self, index, flag):
        print(index, flag)

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = wx.Panel(self)
        self.list = TestListCtrl(self.panel, style=wx.LC_REPORT)
        self.list.InsertColumn(0, "No.")
        self.list.InsertColumn(1, "Progress")
        self.list.InsertColumn(2, "Description")
        self.list.Arrange()
        for i in range(1, 6):
            self.list.Append([str(i), "", "It's the %d item" % (i)])        
        self.button = wx.Button(self.panel, label="Test")
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.list, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
        self.sizer.Add(self.button, flag=wx.EXPAND | wx.ALL, border=5)
        self.panel.SetSizerAndFit(self.sizer)
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文