【问题标题】:Make qt4 designer under linux to use python3 for handling custom widgets pluginslinux下制作qt4设计器使用python3处理自定义widgets插件
【发布时间】:2011-12-20 15:38:37
【问题描述】:

我使用这个脚本来启动 qt 设计器,我的自定义小部件(在 Python 3 中)可见:

#!/usr/bin/env python3

import os, sys, subprocess

curDir = os.path.dirname(os.path.abspath(__file__))
params = list(sys.argv) # copy list
params[0] = 'designer' # "designer-qt4" on Linux

widgetsDir = os.path.join(curDir, 'wic', 'widgets')

# add search path for custom widgets and plugins for designer
os.putenv('PYQTDESIGNERPATH', widgetsDir)

subprocess.Popen(params)

但看起来设计师正在使用 python 2.7 来使用小部件插件:

vic@ubuntu:~/wic$ python3 qt_designer.pyw 
vic@ubuntu:~/wic$   File "/home/vic/wic/wic/widgets/w_date_edit_plugin.py", line 63
    app.exec()
           ^
SyntaxError: invalid syntax

如何指导设计师使用 Python 3 而不是 Python 2?

我使用 Kubuntu 11.10、KDE ​​4.7.2、python3.2 和 python2.7,PyQt v4.8.5 compiled for Python 3

【问题讨论】:

    标签: python plugins pyqt pyqt4 qt-designer


    【解决方案1】:

    看起来 PyQt 不允许并行安装处理自定义小部件的设计器插件 (libpythonplugin.so)。所以通常会有一个插件链接到 python2 或 python3,但不能同时链接。

    看起来 Kubuntu 当前安装了插件的 python2 版本(在我的 linux 系统上,它是相反的)。如果你想要一个 python3 版本的插件,只需从源代码编译一个替换。

    编辑

    要编译替换,首先确保您已安装 sip 软件包。我不是 ubuntu 专家,但我认为您将需要 python-sip-devpython3-sip-dev 软件包(当然还有任何依赖项)。

    接下来,下载与系统上安装的版本匹配的 PyQt4 源代码。我找到了一些 ubuntu pyqt 源码包here

    现在解压 tarball,cd 到生成的源目录(对于 Kubuntu 11.10 看起来应该是 PyQt-x11-gpl-4.8.5),然后使用 python3 配置构建:

    $ cd ~/tmp
    $ tar -xf python-qt4_4.8.5.orig.tar.gz
    $ cd PyQt-x11-gpl-4.8.5
    $ /usr/bin/python3.2 configure.py -c -j 4
    

    如果完成且没有错误,请构建它(但不要安装它):

    $ make
    

    使用上述配置选项在我的旧 i686-AMD64-X2-6000 系统上编译 pyqt 大约需要 5 分钟。完成后,libpythonplugin.so 插件应该在PyQt-x11-gpl-4.8.5/designer 目录中。

    您现在可以备份和删除现有插件(在我的系统上它位于 /usr/lib/qt/plugins/designer 目录中),然后复制您的新插件。

    【讨论】:

    • 在我的 Windows 机器上,我必须将 Python 目录放入路径中,才能找到 libpython.dll。所以我认为python版本没有硬编码到libpythonplugin.so。你怎么看?可以通过一些路径调整来解决吗?
    • 看起来libpython2.7.so 被硬编码为libpythonplugin.so。我如何为 python 3 编译libpythonplugin?我从哪里获得源代码?
    • @warvariuc。我已经编辑了我的答案以包含有关如何编译插件的说明。
    • 成功了!它更简单——我确实安装了PyQt-x11-gpl-4.8.6,并将python3版本放入/usr/lib/x86_64-linux-gnu/qt4/plugins/designer/libpythonplugin.so。我认为在为我的系统更新包时它会被包管理器覆盖。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多