wxpython: Aktualisieren eines dict oder einer anderen geeigneten Datentyp aus wx.lib.sheet.CSheet Objekt
-
11-07-2019 - |
Frage
Wenn ich ein Notebook mit drei Tabellenkalkulations Widgets haben, was ist die beste Art und Weise Änderungen an der Tabelle zu haben, ein Wörterbuch aktualisieren (oder vielleicht eine SQLite-Datei?). Sie alle wx Raster Objekte mit einem im Wörterbuch zu den SetNumberRows und SetNumberCols Zusammenhang gebaut kommen? Im Grunde ich bin auf der Suche nach, wie mit den vom Benutzer eingegebenen Daten aus einer Tabelle widget, wie in diesem Beispiel aus dem Tutorial auf python.org angepasst arbeiten:
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()
Lösung
Verwenden Sie einen wxGrid mit wxGridTableBase statt
Hier ist ein einfaches Beispiel:
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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow