Используйте произвольные объекты wx в качестве столбца в wx.ListCtrl - PullRequest
6 голосов
/ 31 марта 2011

У меня есть wx.ListCtrl с установленным битом wx.LC_REPORT. Имеет 3 столбца. Я хочу, чтобы первый столбец был заполнен флажком для каждой записи. Я попытался использовать метод ListCtrl.InsertItem, но он принимает только один аргумент (info), и я не могу найти никаких документов относительно того, каким должен быть этот аргумент. Я пытался просто передать wx.CheckBox на InsertItem безрезультатно.

Возможно ли иметь флажок в качестве записи в wxPython ListCtrl? Если так, как бы я поступил так?

В случае, если есть какая-то двусмысленность относительно того, о чем я говорю, вот изображение того, что я хочу (не уверен, что это wx, но это то, что я ищу). Я хочу установить флажки рядом с 1..5 в столбце №.

list control with checkboxes

1 Ответ

9 голосов
/ 31 марта 2011

Посмотрите на 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()
...