2016-08-15 14 views
0

我正在尋找一種方式讓用戶在wxPython網格中批量編輯數據,有點像在Excel中選擇範圍時,輸入數據並按shift-輸入。這是我的網格的簡化版本:wxpython grid:多個單元格編輯(ala Excel)

class MyGrid(gridlib.Grid): 
    def __init__(self, panel): 
     gridlib.Grid.__init__(self, panel) 
     self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.onEditCell) 
     self.Bind(gridlib.EVT_GRID_RANGE_SELECT, self.onSelection) 

    def onSelection(self, event): 
     if self.GetSelectionBlockTopLeft() == []: 
      self.selected_row_number = 0 
      self.selected_col_number = 0 
     else: 
      self.selected_row_number = self.GetSelectionBlockBottomRight()[0][0] - self.GetSelectionBlockTopLeft()[0][0] + 1 
      self.selected_col_number = self.GetSelectionBlockBottomRight()[0][1] - self.GetSelectionBlockTopLeft()[0][1] + 1 
     print self.selected_row_number, self.selected_col_number 

    def onEditCell(self,event): 
     print self.selected_row_number, self.selected_col_number 

問題似乎是onEditCell事件覆蓋了以前的選擇。所以我可以選擇例如一個四乘四的塊在網格中,onSelection將打印4 4.但是,當我開始輸入並按Enter時,onEditCell將打印0,0,就好像只選擇了我正在編輯的單元格一樣。我如何保持一個「記憶」多少個單元格被選中?謝謝你,

回答

0

回答我的問題:我可以得到它與醜陋的黑客似乎喜歡做的事情以正確的方式不起作用:

def onSelection(self, event): 
    self.previous_selected_row_number = self.selected_row_number 
    self.previous_selected_col_number = self.selected_col_number 
    if self.GetSelectionBlockTopLeft() == []: 
     self.selected_row_number = 0 
     self.selected_col_number = 0 
    else: 
     self.selected_row_number = self.GetSelectionBlockBottomRight()[0][0] - self.GetSelectionBlockTopLeft()[0][0] + 1 
     self.selected_col_number = self.GetSelectionBlockBottomRight()[0][1] - self.GetSelectionBlockTopLeft()[0][1] + 1 
    print self.selected_row_number, self.selected_col_number 
    print self.previous_selected_row_number, self.previous_selected_col_number 



def onEditCell(self,event): 
    print self.previous_selected_row_number, self.previous_selected_col_number 

如果有人能想到更好的辦法...