python - wxPython:不能让 GridCellEnumRenderer 工作?
问题描述
我正在尝试为 GridCellEnumRenderer 建立一个工作示例...
看起来这段代码应该可以工作。Grid.SetCellValue() 的(主要)签名是(int,int,str) https://wxpython.org/Phoenix/docs/html/wx.grid.Grid.html#wx.grid.Grid.SetCellValue
我在 12 年前发现了 Robin Dunn 回复的这篇文章: https ://wxpython-users.wxwidgets.narkive.com/GzzT1ip4/gridcellenumrenderer-behavior
似乎基本问题是相同的。我正在使用 grid.CreateGrid(),我理解这基本上意味着我将让网格在幕后处理数据模型本身(而不是定义回调以挂钩到我自己的数据模型中) )。
但是,无论您是否调用 Grid.SetColFormatNumber(),尝试调用 grid.SetCellValue(int, int, int) 都会(不出所料地)抛出错误。
Robin Dunn 对 12 年前这篇文章的回答似乎暗示核心问题是关于你得到的是一个真正的 int 还是一个的字符串表示。但我不是在这里控制内部 - 我唯一的选择似乎是设置字符串值。据我所知,调用 grid.SetColFormatNumber() 似乎只会影响列是左对齐还是右对齐。
如果唯一的选择是使用 str 类型的值调用 grid.SetCellValue(row, col, value),我看不出让 GridCellEnumRenderer 工作的预期是什么?
看起来这应该是一个非常简单、直接、wxPython 新手的任务,但我认为我仍然像 12 年前的 Stuart McGraw 一样困惑。
如何获取配置为从值列表而不是基本 int 值呈现字符串的网格?
或者,换一种说法,有人可以向我展示使用 GridCellEnumRenderer 的标准、普通、简单的新手类型示例吗?(因为我很难通过 Google、wxPython 文档或 Rappin & Dunn 的书中找到它。)
import wx
import wx.grid
GRID_DATA = [
['Andrew', 2, 'R006'],
['Nandu', 1, 'R007'],
['Dave', 3, 'R008'],
['John', 2, 'R009'],
]
class GridFrame(wx.Frame):
def __init__(self, parent, data):
wx.Frame.__init__(self, parent)
# Create a wxGrid object
grid = self.grid = wx.grid.Grid(self, -1)
grid.CreateGrid(len(data), len(data[0]))
# set the column headers
hdrs = ["Who", "Flavor", "myID"]
for i, hdr in enumerate(hdrs):
grid.SetColLabelValue(i, hdr)
# using this only changes 2nd col alignment - rest is same
grid.SetColFormatNumber(1)
# populate grid with data
for r in range(len(data)):
for c in range(len(data[0])):
value = data[r][c]
grid.SetCellValue(r, c, str(value))
# set Enum-type renderer for second column
if True:
flavors = "undef,grape,mango,orange"
gc_attr = wx.grid.GridCellAttr()
renderer = wx.grid.GridCellEnumRenderer(choices=flavors)
gc_attr.SetRenderer(renderer)
# Rather surprisingly, you can uncomment next two lines and
# get an Enumerated editor to work pretty much as one might
# expect. That's pretty awesome, but separate from the basic
# issue of Enum renderer not working.
# ed = wx.grid.GridCellEnumEditor(choices=flavors)
# gc_attr.SetEditor(ed)
grid.SetColAttr(1, gc_attr)
self.Show()
if __name__ == '__main__':
app = wx.App(0)
frame = GridFrame(None, GRID_DATA)
app.MainLoop()
解决方案
推荐阅读
- service - 如何在已发布的模型中初始化 umbraco MemberService?
- python - 从 Dataframe 中的列名中删除某些关键字
- python - 无论指定长度,Dataframe 只占用我 csv 的前 50 行
- azure - Azure AD 阻止添加 HTTP 回复 URL
- python - Matplotlib 小部件按钮在第一次单击并调用 on_clicked() 后无响应
- php - getUserMedia 抛出“使用未定义的常量......”
- terraform - 如何在 Terraform 中有条件地预配 Azure 点到站点 vpn?
- reactjs - 我应该如何更新 Redux 表单选择字段选项
- spring - JWT 签名与本地计算的签名不匹配。JWT 有效性不能被断言,也不应该被信任
- excel - 如何使用 VBA 将单元格 A1 中的值(例如 LT0123)复制到单元格 A2?