Wow there are some… strange ideas here!
First thing, where you put the data- Adam is right, your settings must go into the appdata folder. You can also use the ‘appdirs’ python module. You should be putting logs there as well. Do not use the registry, do not use the application folder, just do what MS tells you to do, and what users expect, and what takes 0 extra work, and use the appdata folder (through os.environ, or appdirs module).
Second thing. Something many people in games miss is one reason why dynamic languages like python have been so successful in web development- the effortless serialization of data to and from objects. I have absolutely no idea why people would complicate things unnecessarily with all sorts of custom behavior, XML, etc. I have no idea why anyone is parsing or using special modules anything- just use dictionaries and serialize to json (which is in the stdlib) or yaml or whatever (I prefer ascii formats so I can read what’s in there, I have no idea why you’d use binary for this, but whatever, that’s easy to change). If dealing with your settings is doing any more than calling dump and load, you’re over complicating things. Nor do I understand the choice for INI files over other data formats.
We have a python class with GetValue, SetValue, and GetOrSet methods, that will save out the preferences after each Set and will load things from disk automatically, as this is a lot more natural to not have to worry about those aspects on the caller (things just get magically persisted to the filename you initialize it with).
Now this part is more personal but I’d strongly discourage people from using ‘magical’ persistence of UI’s. Be explicit with what you save out and load. UI’s are usually very stateful and dependent upon events and applying some state from preferences to a UI magically is a recipe for disaster and maintenance difficulties. If you want to persist the state of a control, just write the code to persist that state’s control. We’re talking about 2 lines of code and code that is very easy to get right- just be explicit. Remember that frameworks like Qt are very much more geared for languages like C where they do not have a fraction of the ‘batteries’ python comes with. QSettings are IMO complete overkill for python.
I know a lot of the ‘difficulty’ for settings, which should be incredibly simple, are because as programmers we tend to be absolutely horrible with our treatment of mutable state, and of course with UI code as well, and then we treat preferences as global so wow just pile on the mistakes. If you design your code correctly, the treatment of settings is trivial- we have wonderful persistence of pretty much every UI we write here and it took very little work to get it working properly.