[PyQt] Writing dual python2/python3 code and the use of PyQt5.uic
phil at riverbankcomputing.com
Sun Mar 24 14:18:14 GMT 2019
On 24 Mar 2019, at 1:59 pm, Eli Schwartz <eschwartz at archlinux.org> wrote:
> On 3/24/19 6:07 AM, Phil Thompson wrote:
>> On 24 Mar 2019, at 1:48 am, Eli Schwartz <eschwartz at archlinux.org> wrote:
>>> I've been devoting some time recently to incrementally porting a PyQt5
>>> application "calibre" (https://github.com/kovidgoyal/calibre/) from
>>> python2 to polyglot code, hoping to get it running with python3 at some
>>> point. One recent stumbling block I hit was that it uses the uic module
>>> to compile forms into a cStringIO.StringIO.
>>> What I wanted to do was switch it to using the modern io interface, but
>>> as it turns out, PyQt5 uses unqualified "str" instances to write out the
>>> form. As a result, I cannot use io.StringIO on python2, and I cannot use
>>> io.BytesIO on python3.
>>> The uic module quite specifically seems to expect that it will
>>> manipulate unicode strings. I was able to get io.StringIO buffers to
>>> work correctly with both python2 and python3 after I modified two files
>>> to contain a "from __future__ import unicode_literals":
>>> Can this be added to at least these two files in the official
>>> distribution? It seems to be a mistake that it ever assumed the str type.
>> ...makes me nervous. I would prefer a more specific fix.
> The alternative is to add u'' decorations to the specific strings that
> cannot be python2's dual purpose str/bytes.
> I *think* this should be sufficient:
> (Applied on top of a tarball import as I could not find any version
> control sources for PyQt5.)
What about Python v3.3 and earlier?
More information about the PyQt