我正在使用 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)