2

wxPython を使用して、numpy 配列として並列に格納された浮動小数点数の有限サイズのグリッドを表示する小さなプログラムを作成しています。赤から青への滑らかなグラデーションとして、セルの色がそのセルの数値の値を表すようにします。完全に青がグリッドの最小値を表し、完全に赤が最大値です。

私が抱えている問題はSetCellBackgroundColour、セルを呼び出しても常に変化しない、または完全に変化しないことです。たとえば、セルの値を変更すると、セルの一部だけが色を変えたり、全体が完全に青または完全に赤になったりすることがあります。通常、少し待って別のセルをクリックすると、最終的にはその自己が把握され、正しく表示されます。

これが私が添付したイベントハンドラですwx.grid.EVT_GRID_CELL_CHANGE:

def onGridChange(self, evt):
    row, col = evt.GetRow(), evt.GetCol()
    value = float(self.myGrid.GetTable().GetValue(row, col))
    self.table[row][col] = value
    self.update_colors()
    evt.Skip()

def update_colors(self):
    table_min = self.table.min()
    table_max = max(table_min + 1, self.table.max()) # to avoid dividing by zero later on.
    table_range = table_max - table_min
    for row in range(self.num_rows):
        for col in range(self.num_cols):
            percentage = (self.table[row][col]-table_min)/table_range
            color = (int(255*percentage), 0, int(255*(1.-percentage)))
            self.myGrid.SetCellBackgroundColour(row, col, color)
4

1 に答える 1

2

@jozzas が指摘したようself.myGrid.ForceRefresh()に、現在アクティブなセルの外側のセルが更新されるたびに、グリッドで a を実行する必要がありました。それは私の問題を解決しました!ありがとう!

于 2013-01-03T22:52:27.097 に答える