How to add data to columns wxDataViewListCtrl?

I made a wx.dataview.DataViewListCtrl widget, I added 8 columns to it, and I want to add data to those columns, I cannot figure out how to do that, what is VariantVector type? I can’t find any information about it online no examples nothing, can’t find about UIntPtr either. What do I need to put in those parameters to add data. I basically want to insert data into the columns based on what audio file the user chooses from DirCtrl or FileBrowser, and then I use mutagen to get tags and info about that audio, and I want to insert say filename in one column, genre in another, length in another and so on. I can provide any information screenshots, code snippets if needed.

Did you have a look at the demo DVC_ListCtrl.py?

Do you mean this?
https://sourcecodequery.com/example-method/wx.DataViewListCtrl

If not could you please share the link to the file please.

@DietmarSchwertberger meant the full wxPython demo. Get the one that matches the version of your wxPython from here: https://extras.wxpython.org/wxPython4/extras/ and run the demo.py script.

The demo contains small samples for most of the widgets in wxPython which demonstrate the widget and sometimes a few options. The code for each sample is also editable in the demo so you can experiment with it.

1 Like

It seems that more and more users miss the demo.

May I suggest to add the demo to the standard distribution? Is there a way to ask the user after installation whether he/she wants to run the demo?

Maybe, it would be possible to add links or hints to the documentation page as well.

I would suggest to drop the ‘dependency’ on numpy instead. This is using much more resources than the demo.

1 Like

I’ve been thinking about this today too. Let’s continue the discussion in the wxPython Dev category.

1 Like

Yes, I cannot find any link to the demo, I have been searching whole day so I can find some demo examples to look at. I did find example for C++ version not for python but.

I saw the demo for DVC_ListCtrl.py, looks like they are using a list of lists as a 2d matrix for rows and columns. I tried something, my app did open but with a error message box, and when I clicked OK, it closed the app.

Code I tried

        Sdata = [["one", "two", "three", "four", "five", "six", "seven", "eight"],
                 ["one", "two", "three", "four", "five", "six", "seven", "eight"],
                 ["one", "two", "three", "four", "five", "six", "seven", "eight"],
                 ["one", "two", "three", "four", "five", "six", "seven", "eight"],
                 ["one", "two", "three", "four", "five", "six", "seven", "eight"],
                 ["one", "two", "three", "four", "five", "six", "seven", "eight"],
                 ["one", "two", "three", "four", "five", "six", "seven", "eight"]]

        for item in Sdata:
            SampleListView.AppendItem(item)

        print("Column: " + str(SampleListView.GetColumn(1)))
        print("Column count: " + str(SampleListView.GetColumnCount()))
        print("Item count: " + str(SampleListView.GetItemCount()))
        print("Selected Items count: " + str(SampleListView.GetSelectedItemsCount()))
        print("Selected row: " + str(SampleListView.GetSelectedRow()))

And the error I get is

❯ python main.py
03:36:55: Warning: Mismatch between the program and library build versions detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1013,wx containers,compatible with 2.8),
and wxPython used 3.0 (wchar_t,compiler with C++ ABI 1014,wx containers,compatible with 2.8).
Default path before: /
Default path after: /home
Column: <wx._dataview.DataViewColumn object at 0x7f1f8eb96310>
Column count: 8
Item count: 7
Selected Items count: 0
Selected row: -1

Traceback (most recent call last):
  File "main.py", line 13, in <module>
    frame.Show()
wx._core.wxAssertionError: C++ assertion "Assert failure" failed at ./src/common/variant.cpp(684) in GetBool(): Could not convert to a bool

The mismatch warning is telling you that wxPython was built with one version of wxWidgets, but the wxWidgets found at runtime has a different version with a different ABI.

The assert failure is telling you that the DVLC is unable to convert a data item type (string) to the expected type for the column (bool). Take a closer look at how you defined your columns.

2 Likes

Thank you, I forgot I have my first column as a ToggleColumn, I changed all to False, now it works. :smiley:

Ok, I’m able to add data to each column the way I wanted to, but I get some error box pop up everytime I add a item, saying Wrong type, required: arrstring but: string. I’m not sure what this means, what is arrstring?

How are your columns created? Is one of them expecting a sequence of strings? “arrstring” is the internal variant type name for the C++ wxArrayString type.

P.S. It’s always a good idea to share at least part of the code that relates to the problem. (Duplicating the problem in a small runnable application is even better.) That would save the helpers from needing to ask questions like the above.

1 Like

Reading your reply I figured it out, I had a value inside the list as another list, I’m calling that by index now, so it fixed that. Sorry I’ll be sure to share code snippet next time. :smiley:

What event to catch to see if toggle column is activated in wxDataViewListCtrl? Is it EVT_DATAVIEW_ITEM_ACTIVATED?

Also is there a way to change toggle column default check box to a image like a star?

May I suggest that you look at the documentation and the demo?

E.g. from the docs, EVT_DATAVIEW_ITEM_VALUE_CHANGED is a promising candidate.
If things don’t work, ask here and include a runnable code sample.

P.S.: For exploring, it’s a good practise to add handlers for all the events which will just print that there is an event. From this you will see what happens. Then, put a breakpoint at the most promising event handler and explore what data the event has to offer.