Подавить обновление wxPython GridTableBase? - PullRequest
1 голос
/ 03 сентября 2010

Как сделать так, чтобы фрагмент кода ниже обновлялся, когда я хочу?

Например, если я запустлю его как есть, строка table.SetValue(0,0,'test') сразу обновит сетку. Есть ли способ изменить это поведение, чтобы я мог внести произвольное количество изменений в GridTableBase, а затем запросить обновление? Если это так, как я могу изменить код ниже, чтобы получить эту функциональность?

import wx 
import wx.grid

class TestTable(wx.grid.PyGridTableBase):
    def __init__(self):
        wx.grid.PyGridTableBase.__init__(self) 
        self.data = { (1,1) : "Here", (2,2) : "is", (3,3) : "some", (4,4) : "data"}
        self.odd=wx.grid.GridCellAttr() 
        self.odd.SetBackgroundColour("sky blue") 
        self.odd.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
        self.even=wx.grid.GridCellAttr()
        self.even.SetBackgroundColour("sea green")
        self.even.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))

    def GetNumberRows(self): 
        return 50

    def GetNumberCols(self): 
        return 50

    def IsEmptyCell(self, row, col): 
        return self.data.get((row, col)) is not None

    def GetValue(self, row, col): 
        value = self.data.get((row, col)) 
        if value is not None:
            return value 
        else:
            return ''

    def SetValue(self, row, col, value): 
        self.data[(row,col)] = value

    def GetAttr(self, row, col, kind): 
        attr = [self.even, self.odd][row % 2] 
        attr.IncRef() 
        return attr

class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="Grid Table", size=(640,480))
        grid = wx.grid.Grid(self) 
        table = TestTable()
        grid.SetTable(table, True)
        table.SetValue(0,0,'test')

app = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
app.MainLoop()

1 Ответ

0 голосов
/ 03 сентября 2010

Для этого есть методы сетки BeginBatch и EndBatch, но они не подходят для работы с пользовательскими таблицами сетки.

Вы можете попытаться отложить вызов grid.SetTable до тех пор, пока не заполните данные. Для последовательных пакетов вы можете клонировать текущую таблицу сетки, внести необходимые изменения в клон и установить клон в качестве текущей таблицы сетки.

Если вы попробуете это, вы, вероятно, захотите сами управлять этими таблицами сетки, поэтому не заставляйте сетку владеть ими, как вы это делали в своем примере (аргумент True в вызове SetTable).

...