PyQt Retina

前几天买了MBP Retina,发现用PyQt4编出来的Mac app不是Retina,Widget和窗口的左上角的三个按钮都是模糊的,一查发现Qt5开始支持Retina,于是就去装了。

PyQt4贪方便,用了Homebrew安装,于是继续安装PyQt5,发现除了个问题,就是Mac OS X 10.9就把libstdc++改成了libc++,导致PyQt5不能安装,上到Homebrew的Github Issues找答案,有可能需要重新安装大部分软件。

于是还是不能偷懒,去把Qt5和PyQt5的源码下载,自己从源代码build。

第一次Build分别用了Python2.7和Python3.3,都成功,Python3.3可以用,但Python2.7不能用,会出现Symbol not found的错误。

为什么特别要用Python2.7呢?因为PyInstaller目前支持到Python2.7,而另外一个Package软件Pyside又不支持Qt5。所以如果PyQt5不能在Python2.7使用,基本上要Python写的Qt程序不能用Retina。

后来发现PyInstaller需要一个叫SIP的软件,由于学这个时间只有几天,不知道是什么,最后还是把那个也用Python2.7装了,最终可以在Python2.7使用PyQt5,OK。我估计原因是之前的SIP是Homebrew用Python3安装的。

Qt4迁移到Qt5也是一个问题,因为网络上几乎没有任何Qt5的教程,如果现在入手PyQt5,无奈地要看PyQt4的教程,然后安装迁移提示升级。

Qt5安装:

官网上有Mac的安装软件,可以安装到家目录下:~/Qt5.2.0

SIP安装:

cd sip-4.15.3
python2.7 ./configure.py
make
sudo make install

PyQt5安装,–qmake的路径根据Qt5的目录,里面肯定有个叫qmake的程序,–sip和–sip-incdir根据之前SIP安装的输出结果,sudo make install时会列出sip和sip.h这两个文件的路径,分别填入目录和文件路径即可:

cd PyQt-gpl-5.1.1
python2.7 ./configure.py –qmake /Users/caiguanhao/Qt5.2.0/5.2.0/clang_64/bin/qmake –sip-incdir /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/include/python2.7/ –sip /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/bin/sip
make
sudo make install

现在应该可以用PyQt5生成app了。但还不是Retina的。

当然还有一步,根据这里,在生成的app文件下找到Info.plist,加入:

<key>NSHighResolutionCapable</key>
<string>True</string>

当然这不能通过填写spec文件自动修改,因为PyInstaller生成的Info.plist是固定的,你要更改PyInstaller/build.py大约1500行的位置

用以下命令直达该目录:

cd $(python2.7 -c "import site; print site.getsitepackages()[0]")/PyInstaller

我先自己加了

Advertisements

One thought on “PyQt Retina

  1. Pingback引用通告: PYQT RETINA | zcw的博客

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

w

Connecting to %s