I think all of the StringIO usage in this PR should be changed to BytesIO.  (You can use "from wx.lib.six import BytesIO" to get it imported.)  This is because in Py3 StringIO is for reading/writing unicode objects, but in all these uses we are wanting to read binary data, not strings.