在Linux下让Qt4 Designer使用Python3处理自定义小部件插件

2 投票
1 回答
1160 浏览
提问于 2025-04-17 05:31

我用这个脚本来启动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,还有为Python 3编译的PyQt v4.8.5

1 个回答

2

看起来PyQt不支持同时安装处理自定义小部件的设计插件(libpythonplugin.so)。通常情况下,只会有一个插件链接到python2或python3,但不能同时链接两个。

目前Kubuntu似乎安装的是python2版本的插件(在我的Linux系统上正好相反)。如果你想要python3版本的插件,只需从源代码编译一个替代品即可。

编辑

要编译替代品,首先确保你安装了sip相关的包。我对ubuntu不是很专业,但我认为你需要安装python-sip-devpython3-sip-dev这两个包(当然,还有其他依赖包)。

接下来,下载与你系统上安装的版本相匹配的PyQt4源代码。我找到了一些ubuntu的pyqt源代码包,可以在这里找到。

现在解压下载的文件,进入解压后的源代码目录(对于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目录),然后将你新编译的插件复制过去。

撰写回答