wxpython: обновление dict или другого подходящего типа данных из объекта wx.lib.sheet.CSheet - PullRequest
3 голосов
/ 30 ноября 2008

Если у меня есть записная книжка с тремя виджетами электронной таблицы, как лучше всего внести изменения в электронную таблицу, чтобы обновить словарь (или, может быть, файл sqlite?). Все объекты сетки wx поставляются со встроенным словарем, связанным с SetNumberRows и SetNumberCols? В основном я ищу руководство о том, как работать с данными, вводимыми пользователем из виджета электронной таблицы, как в этом примере, адаптированном из руководства на python.org:

.
class ExSheet(wx.lib.sheet.CSheet):
    def __init__(self, parent):
        sheet.CSheet.__init__(self, parent)
        self.SetLabelBackgroundColour('#CCFF66')
        self.SetNumberRows(50)
        self.SetNumberCols(50)

class Notebook(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)
        nb = wx.Notebook(self, -1, style=wx.NB_BOTTOM)
        self.sheet1 = ExSheet(nb)
        self.sheet2 = ExSheet(nb)
        self.sheet3 = ExSheet(nb)
        nb.AddPage(self.sheet1, "Sheet1")
        nb.AddPage(self.sheet2, "Sheet2")
        nb.AddPage(self.sheet3, "Sheet3")
        self.sheet1.SetFocus()
        self.StatusBar()

1 Ответ

4 голосов
/ 30 ноября 2008

Используйте wxGrid с wxGridTableBase вместо

Вот простой пример:

import wx, wx.grid

class GridData(wx.grid.PyGridTableBase):
    _cols = "a b c".split()
    _data = [
        "1 2 3".split(),
        "4 5 6".split(),
        "7 8 9".split()
    ]

    def GetColLabelValue(self, col):
        return self._cols[col]

    def GetNumberRows(self):
        return len(self._data)

    def GetNumberCols(self):
        return len(self._cols)

    def GetValue(self, row, col):
        return self._data[row][col]

    def SetValue(self, row, col, val):
        self._data[row][col] = val

class Test(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self.data = GridData()
        grid = wx.grid.Grid(self)
        grid.SetTable(self.data)
        self.Bind(wx.EVT_CLOSE, self.OnClose)
        self.Show()

    def OnClose(self, event):
        print self.data._data
        event.Skip()

app = wx.PySimpleApp()
app.TopWindow = Test()
app.MainLoop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...