2018-05-05 17:49
浏览 107


I'm obviously missing some basic understanding of either Go or Wx Widgets.

I'm trying to create a very basic table with checkboxes in the first column.

table := wx.NewGrid(w, wx.ID_ANY)
table.CreateGrid(4, 2)
table.SetCellEditor(0, 0, wx.SwigIsGridCellBoolRenderer{})

That code gives me this error:

invalid type for composite literal: wx.SwigIsGridCellBoolRenderer

I know I also have to set the editor. But I'm not even that far. The more detailed the answer, the better. Thank you!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • duanpei4455
    duanpei4455 2018-05-10 14:54

    The error hints you are using a composite literal, which can be used to create values of struts, slices, arrays, maps or derivatives of these.



    Would be an empty composite literal of the type wx.SwigIsGridCellBoolRenderer, but that type is nether of the types you may use with a composite literal. It is an interface type:

    type SwigIsGridCellBoolRenderer interface {
        SwigGetGridCellBoolRenderer() GridCellBoolRenderer

    wx.NewGrid() returns a type of wx.Grid which is an interface with a method:

    SetCellEditor(arg2 int, arg3 int, arg4 SwigIsGridCellEditor)

    So you have to pass a value to it that satisfies / implements the wx.SwigIsGridCellEditor interface.

    This interface has a single method:

    type SwigIsGridCellEditor interface {
        SwigGetGridCellEditor() GridCellEditor

    So any type that has such SwigGetGridCellEditor() method may be used here. Such types are:

    • wx.SwigClassGridCellTextEditor
    • wx.SwigClassGridCellAutoWrapStringEditor
    • wx.SwigClassGridCellBoolEditor
    • wx.SwigClassGridCellChoiceEditor
    • wx.SwigClassGridCellEnumEditor
    • etc.

    So create an instance of one of the above, that you can pass to table.SetCellEditor().

    For example:

    editor := wx.NewGridCellTextEditor()
    table.SetCellEditor(0, 0, editor)
    点赞 评论