微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wxPython:不能让 GridCellEnumRenderer 工作吗?

如何解决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) 将(不出所料)抛出一个 错误

Robin Dunn 12 年前对文章的回答似乎暗示核心问题是关于您是否获得真正的 int 或字符串表示形式。 但我不是在这里控制内部结构——我唯一的选择似乎是设置字符串值。 据我所知,调用 grid.SetColFormatNumber() 似乎只会影响列是左对齐还是右对齐。

如果唯一的选择是使用 str 类型的值调用 grid.SetCellValue(row,col,value),我看不出需要什么才能使 GridCellEnumRenderer 工作?

看起来这应该是一个非常简单、直接、wxPython-newbie 的任务, 但我想我仍然和 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','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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。