Как разрешить UltimateListCtrl переставлять себя, wxpython - PullRequest
0 голосов
/ 04 января 2012

как я могу позволить UltimateListCtrl, чтобы иметь возможность переупорядочить / переставить себя с пользовательским вводом?Следующее показывает способность, однако я не уверен, как это можно сделать.ДАННЫЕ = {0: («3», «3», «1»), 1: («2», «1», «2»), 2: («1», «2», «3»)}

import wx
import wx.lib.mixins.listctrl as listmix
from wx.lib.agw import ultimatelistctrl as ULC

class MyList(ULC.UltimateListCtrl, listmix.ColumnSorterMixin):
    def __init__(self, parent, columns):
        ULC.UltimateListCtrl.__init__(self, parent, agwStyle=ULC.ULC_REPORT | ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
        self.itemDataMap = DATA
        listmix.ColumnSorterMixin.__init__(self, columns)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumn)

    def OnColumn(self, e):
        self.Refresh()
        e.Skip()

    def GetListCtrl(self):
        return self

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.list = MyList(self, 3)
        self.list.InsertColumn(0, "A")
        self.list.InsertColumn(1, "B")
        self.list.InsertColumn(2, "C")

        items = DATA.items()
        for key, data in items:
            index = self.list.Append(data)
            self.list.SetItemData(index, key)

        self.Show()

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

1 Ответ

0 голосов
/ 04 января 2012

Возможно, вы запрашиваете что-то вроде этого:

class MyList(ULC.UltimateListCtrl, listmix.ColumnSorterMixin):
    def __init__(self, parent, data):
        ULC.UltimateListCtrl.__init__(self, parent, agwStyle=ULC.ULC_REPORT | ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
        self.data = data
        self.IDoMyself()
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumn)

    def IDoMyself(self):
        self.itemDataMap = self.data
        listmix.ColumnSorterMixin.__init__(self, len(self.data))

        self.InsertColumn(0, "A")      # you should generalize this for any size
        self.InsertColumn(1, "B")
        self.InsertColumn(2, "C")

        for key, data in self.data.items():
            index = self.Append(data)
            self.SetItemData(index, key)

    def OnColumn(self, e):
        self.Refresh()
        e.Skip()

    def GetListCtrl(self):
        return self

Обратите внимание, что вам также следует автоматизировать процесс InsertColumn, чтобы программно учитывать количество столбцов.Если вам не нужны специальные имена столбцов, и вы должны использовать только несколько, вы можете использовать string.ascii_uppercase, чтобы получить букву для каждого столбца.

Затем вы создаете экземпляр класса в вашем фрейме:

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        DATA = { 0 : ("3", "3", "1"), 1 : ("2", "1", "2"), 2 : ("1", "2", "3") }
        self.list = MyList(self, DATA)
        self.Show()

Я поместил здесь DATA, но немного изменив код, его можно было бы отправить извне с помощью вызова типа MainWindow (self, DATA).

...