引言

找了很多Python GUI工具集,还是觉得PyQt比较理想,功能强大跨平台,还支持界面设计器。花一天时间折腾了Ubuntu14.04(32位)+ Python3.4 + Qt5.3.2 + PyQt5.3.2 + Eric6.0 的完整开发平台的搭建,各种出错差点放弃了,好在终于一一解决了,记录下来以后搭建起来方便点。

安装Python3.4

Ubuntu14.04貌似默认安装了Python2.7 和Python3.4。故Python3.4的安装可略去。

安装Qt5

Ubuntu14.04自带Qt4的部分库文件,但是我们的平台要求Qt5,所以首先安装Qt5.

Qt5.3.2下载:http://qt-project.org/downloads

安装过程:

下载到的是Qt5的在线安装程序,为其赋予可执行权限即可单击启动。由于我之前文件都安装在/opt目录下,故这里以root身份安装:

sudo chmod a+x qt-opensource-linux-x86-1.6.0-5-online.run

sudo ./qt-opensource-linux-x86-1.6.0-5-online.run

启动界面后默认安装即可。

配置过程:

安装完成后配置一下PATH,在当前用户主目录下的.bashrc (or .zshrc)文件中加入:

export QTDIR=/opt/Qt/5.3/gcc/

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${QTDIR}/lib

export PATH=${QTDIR}/bin:${PATH}

注意${QTDIR}/bin和${PATH}的顺序!因为Ubuntu14.04默认${PATH}路径中的/usr/bin下存在诸多qt命令(确切的说是指向qtchooser的软连接,qtchooser最终会选择系统自带的Qt4命令:但是这些命令默认都不存在),如果${QTDIR}/bin在${PATH}之后,会导致Qt命令失效。

特别是qmake命令,在后续安装中需要用到,保险起见,在终端输入qmake,如果显示qmake命令不存在,请通过创建软连接进行解决:

将/usr/bin下的qmake软连接到/opt/Qt/5.3/gcc/bin/qmake上,或者将/usr/lib/i386-linux-gnu/qt4/bin/qmake软连接到/opt/Qt/5.3/gcc/bin/qmake上:

sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/bin/qmake

or

sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/lib/i386-linux-gnu/qt4/bin/qmake

此时再输入qmake查看是否设置成功。

安装SIP

SIP是python调用C/C++库的必备模块。因此SIP是PyQt的依赖工具,安装PyQt之前必须先安装对应版本的SIP。PyQt编译时使用的SIP版本必须与python默认调用的SIP保持一致!否则python中是无法调用PyQt的。这里我们使用最新的SIP 4.16.3.

Ubuntu14.04中貌似是自带4.15版的SIP(or 自己安装python扩展是自动安装的)。终端输入:

sip -V

查看已安装SIP版本,如果存在其他版本,请查看python3的dist-packages目录下是否存在sip相关文件。如果存在将其删除:

sudo -rm /usr/lib/python3/dist-packages/sip*

然后正式安装SIP 4.16.3。

SIP 4.16.3下载:http://www.riverbankcomputing.com/software/sip/download

安装过程:

tar -zxvf sip-4.16.3.tar.gz

cd sip-4.16.3

python3 configure.py

sudo make

sudo make install

配置过程:

SIP无需配置,只是需要安装完成后注意核对一下版本:

分别在终端输入:

sip -V

在python3环境输入:

>>>import sip

>>>print(sip.SIP_VERSION_STR)

查看二者显示的版本是否一致。如不一致,需要重新执行上述删除过程和安装过程。版本不一致将意味着后面编译PyQt所使用的SIP和Python3调用的SIP的不一致,导致在Python3中调用PyQt的相关模块(from PyQt5 import QtCore)出现类似如下错误:

the sip module implements API v11.0 but the PyQt5.QtCore module requires API v11.1

安装PyQt5

PyQt是Python的一个跨平台图形开发工具集,是Python与Qt的成功融合。PyQt包含了大约440个类、超过6000个的函数和方法,灰常强大。需要注意的是,Eric(一种Python IDE,依赖PyQt)当前最新的稳定版Eric5只支持PyQt4(确切的说是PyQt4.8以上5.0以下),支持PyQt5的Eric版本现在仅为Eric6.0 snapshot版,该版本包含最新的Eric5的所有功能,但稳定性需要测试。如果你希望使用稳定的Eric5,请在此步骤安装PyQt4的最新版PyQt4.11.2。这里我们安装PyQt5.3.2.

PyQt5.3.2下载:http://www.riverbankcomputing.com/software/pyqt/download5

安装过程:

tar -zxvf PyQt-gpl-5.3.2.tar.gz

cd PyQt-gpl-5.3.2

python3 configure.py

注意:此命令生成各种Qt模块后,其中的QtWebKitWidgets模块由于Qt4和Qt5的qprinter.h所属模块的调整(Qt4存在于QtGui中,Qt5将其调整到QtPrintSupport中了),QtWebKitWidgets的Makefile中缺失了对QtPrintSupport的头文件目录引用,会导致后面编译PyQt5时无法找到qprinter.h头文件,编译失败(编译过程非常漫长):

qprinter.h: No such file or directory

所以需要向刚生成的QtWebKitWidgets模块源文件的MakeFile文件的INCPATH中添加QtPrintSupport引用。

原INCPATH为:

INCPATH = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.

修改为:

INCPATH = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtPrintSupport -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.

或者可以直接在QtWebKitWidgets模块源文件的QtWebKitWidgets.pro文件中加入:

QT += printsupport

也行。

接下来执行编译安装:

sudo make

sudo make install

配置过程:

安装完成后进入Python3环境验证是否安装成功:

>>>import PyQt5

如果提示不存在PyQt5模块,表示安装的PyQt5没有被python3正确识别。默认的安装路径为python的site-packages目录。通常python3的模块安装路径会分成2个,一个/usr/lib/python3,一个/usr/lib/python3.4,两个路径下的模块都能被python3环境正确调用,但是python3.4的site-packages目录下的模块貌似无法调用。PyQt5偏偏默认安装到此目录了。解决办法是为其创建软连接,保险起见,python3目录和python3.4目录分别创建一个:

sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3.4/PyQt5

sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3/dist-packages/PyQt5

可能不同的计算机上可识别的模块安装目录会存在差异,但是解决原理都差不多,在python3可识别模块的路径下创建PyQt5的软连接即可让Python3成功识别。

另外一个解决办法是在python3 configure.py  时就指定安装目录。如:

python3 configure.py --destdir /usr/lib/python3.4

安装QScintilla2

QScintilla2是连接编译器和Python的接口,因此是Eric的必需前置组件。QScintilla2 中需要单独安装3个模块:本体,Designer和python bingdings。

QScintilla2.8.4下载:http://www.riverbankcomputing.com/software/qscintilla/download

安装过程:

tar -xzvf QScintilla-gpl-2.8.4.tar.gz

cd QScintilla-gpl-2.8.4

A.安装本体:

cd Qt4Qt5

qmake qscintilla.pro

sudo make

make install

B.安装Designer:

cd ../designer-Qt4Qt5

qmake designer.pro

sudo make

sudo make install

C.安装Python bingdings:

cd ../Python

python3 configure.py --pyqt=PyQt5

sudo make

sudo make install

以上步骤即可正确安装QScintilla2。需要注意的是Python bingdings安装时需要指定 --pyqt=PyQt5参数,否则默认是为PyQt4安装。或者直接修改其configure.py,将pyqt5_is_default = False改为pyqt5_is_default = True也可。

配置过程:

无需额外配置。

安装Eric6

Eric作为一款强大的开源Python IDE,支持Qt界面设计器的Eric在Python GUI开发中更是首屈一指,Python+PyQt+Eric已经成为一种标准的Python GUI开发平台。其中Eric4支持Python2.6+与PyQt4.6+组合,Eric5支持Python3.0+与PyQt4.8+组合,Eric6支持Python3.0+与PyQt5.0+组合。目前Eric5.4.7为最新稳定版。Eric6.0为snapshot版。上文已有介绍。具体搭配可参考:http://eric-ide.python-projects.org/eric-download.html。这里安装Eric6.0.

Eric6.0下载:http://sourceforge.net/projects/eric-ide/files/eric6/unstable/

下载其中的eric6-6.0-snapshot-20140720.tar.gz主文件和eric6-i18n-zh_CN.GB2312-6.0-snapshot-20140720.tar.gz中文语言包。

安装过程:

tar -zxvf eric6-6.0-snapshot-20140720.tar.gz

tar -zxvf eric6-i18n-zh_CN.GB2312-6.0-snapshot-20140720.tar.gz //语言包文件会自动解压到Eric6.0主文件解压目录中。没有的话手动复制。

cd eric6-6.0-snapshot-20140720

sudo python3 install.py //安装主程序

sudo python3 install-i18n.py //安装中文语言包

应该能够顺利安装完成。

需要注意,由于是以root身份安装(sudo),所以运行时需要执行:

sudo eric6

才不会导致Eric运行或者关闭时写入配置文件出错(sudo安装的Eric6的文件都是root所有,其他用户执行Eric6写入配置文件时权限不足)。为了保证直接执行:

eric6

时不致出错,可以将当前用户的eric6目录权限设置为可读写:

sudo chmod a+w -R ~/.eric6

sudo chmod a+w -R ~/.config/Eric6

或者安装时就直接

python3 install.py

python3 install-i18n.py

就无需sudo执行了。但是不推荐这样做。

配置过程:

终端输入eric6启动:

1、选择Settings -> preference -> Editor -> Autocompation。勾选所有选框;

2、选择Settings -> preference -> Editor -> QScintilla 。勾上左右的两个选框,然后在下面source中,选择from Document and API files;

3、选择Settings -> preference -> Editor -> APIs。勾选Complie APIs Autocompation,在Language中,选择python3。点面下面的Add from installed APIs按钮,选择住需要的.api文件。最后点击Compile

APIs;

4、选择Settings -> preference -> Interface -> Interface。右侧Language根据喜好选择中文或者English。重启生效。

配置完成。

Demos

提供2个简单的Demo验证平台是否正确搭建。

A. 非Eric小程序:

#!/usr/bin/env python

from PyQt5.QtWidgets import (QApplication, QLabel)

import sys

if __name__ == "__main__":

app = QApplication(sys.argv)

label = QLabel("

Hello World with PyQt5!")

label.resize(200, 50)

label.show()

sys.exit(app.exec_())

B. Eric小项目:

此部分转自:http://www.pythoner.com/89.html

1、新建项目。

点击【项目】-【新建】,弹出如下的对话框。创建一个名为demo2的项目。注意,在创建项目时,eric不会自动根据填写的项目名称修改项目文件夹名称!

点击确定之后,可以看到一个源代码树中只有__init__.py的项目。另外,eric还创建了几个文件,但是并不会在这里显示出来,他们分别是项目文件”pyqtdemo.e4p”和”_eric4project”文件夹。

2、新建窗体。

将左侧的【源代码】选项卡切换至【窗体】选项卡(左数第二个)。右键空白区域,选择【新建窗体】。在弹出的对话框中选择【对话框】。在弹出的文件对话框中,选择文件位置,并填写文件名称。这里,我们将其命名为demo2.ui。确定后,就可以看到【窗体】选项卡中,有一个demo2.ui文件了。

3、设计窗体。

右键点击“pyqtdemo.ui”文件,选择【在Qt设计师中打开】,就可以在Qt Designer中设计UI界面了。

从图中可以看到,Qt Designer分为如下几个部分:

菜单栏:包括文件、编辑、窗体、视图、设置、窗口和帮助。

工具栏:包括文件操作、部件前后置、编辑窗口部件、编辑信号/槽、编辑伙伴、编辑Tab顺序、布局方式、调整大小等。

部件栏:包括各种可用部件。

窗体设计区域

对象查看器:可以查看各部件对象关系树及其所属的类

属性编辑器

信号/槽编辑器

动作编辑器

资源编辑器

3.1、修改窗体属性

默认的窗体属性中,objectName(部件名称,其他程序引用时使用)默认为Dialog,windowTitle(窗体标题)默认也是Dialog。我们可以根据自己的需要,对对话框的各个属性进行修改。这里,我只修改了windowTitle为“PyQt Demo”,并改变了其大小。

3.2、添加部件

从左侧的widget box中拖出3个PushButton,1个label。修改它们的objectName、text等属性。其中3个PushButton的ObjectName分别为btn1、btn2、btnClose。

添加后的效果图,如下图所示:

4、信号与槽

4.1、概念

在PyQt5中,事件处理的相关术语为“信号(signal)”和“槽(slot)”。

信号的含义就是我们常说的事件,比如按钮被按下、复选框勾选状态变更、可输入文本框文本变更等等。

槽的含义则是事件处理函数,比如关闭窗体、隐藏窗体、最大/小化、设置焦点、重绘等。

4.2、使用一个自带的槽

我们从工具栏中,选择【编辑信号/槽】。

拖动要编辑的部件,会出现一个类似于电路中接地符号的标志,并弹出对话框。

这里,我们选择clicked(),即按钮被按下,此时看到右侧可选的槽并不多,并且没有我们希望使用到的关闭功能。

勾选【显示从QWidget继承的信号和槽】,这时可以发现,右侧的槽多了很多。在其中找到close(),点击确定。此时,点击【关闭】按钮执行对话框关闭的功能就已经实现了。

下图是已经创建了【关闭】按钮槽之后的窗体设计图。

4.3、第一次运行

虽然只实现了一个关闭功能,但是还是让我们先来看看如何运行这个到目前为止一行代码都没有写过的程序吧。

现在回到eric的界面,右键“demo2.ui”,选择【编译窗体】。

短暂的时间过后,可以看到编译成功提示。这时,我们切换到【源代码】选项卡,可以看到一个名为Ui_demo2.py的文件,这就是根据刚才那个ui文件自动编译而成的,我们不需要对其进行任何修改,也不应当对其进行任何修改,因为,任何对这种文件,在下次编译后,之前的修改会全部不存在。

看,下图,就是我们第一次运行时的场景。在eric里,我们可以F2直接运行,或F5进行调试。当按下【关闭】的时候,窗体就会被关闭。

4.4、创建自定义槽

使用自带槽的方式很简单,然而,它所能实现的功能也是有限的,在我们的开发中,绝大多数信号发生时,不会使用默认的槽。因此,这一小节将通过按钮1、2的实现来介绍如何创建一个自定义槽。

自定义槽,就要求自己写其中的槽函数,而之前的操作中,我们还没有动手写过一次代码,那么这个槽的代码写在哪里呢?

我们再切换回【窗体】选项卡,右键demo2.ui,选择【生成对话框代码】。

首先,点击【新建】,新建一个类,在这里可以修改类名、文件名和路径。

然后在下面的选框中,选择自己需要使用到的信号。比如,我的选择如下图所示,是两个按钮被按下时的信号:

这时,就生成了一个默认的代码。对这个代码进行修改,实现预期的内容。

5、完成

修改之后代码和运行界面如下:

( 完 )

pyqt5 python3.4_Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0开发平台相关推荐

  1. linux下的svn搭建,Ubuntu 14.04 下搭建SVN服务器 svn://

    Ubuntu 14.04 下搭建SVN服务器 svn:// 安装软件包: sudo apt-get install subversion 之后选择SVN服务文件及配置文件的放置位置.我放在了/srv下 ...

  2. linux下swift编程教程视频教程,Ubuntu 14.04下搭建 Swift 3.0 开发环境教学视频+PPT

    分享Ubuntu 14.04下搭建 Swift 3.0 开发环境教学视频+PPT. Linux版本:Ubuntu: 14.04 LTS Swift: 3.0 到https://swift.org/do ...

  3. ubuntu 14.04 下搭建SVN服务器 svn://

    安装软件包: sudo apt-get install subversion 之后选择SVN服务文件及配置文件的放置位置.我放在了/srv下的svn目录. cd /srv sudo mkdir svn ...

  4. linux编译boost配置codeblocks,Ubuntu 14.04下CodeBlocks手动编译配置Bost 1.57.0

    环境:Ubuntu 14.04  32bit,boost_1_57_0 前期准备:boost中,用到了别的函数库,所以为了使用boost中相应的功能,需要先安装系统中可能缺失的库 apt-get in ...

  5. 20230508在Ubuntu22.04下使用python3批量转换DOCX文档为TXT

    20230508在Ubuntu22.04下使用python3批量转换DOCX文档为TXT 2023/5/8 16:27 在WIN10下请参考本文,在Ubuntu22.04下需要不通的插件! https ...

  6. Ubuntu 14.04 下 Virtual Judge 的搭建

    前期准备工作 1.1 一个Linux系统 因为现场赛的缘故,我一直使用的都是ubuntu. 这里我测试用的是Ubuntu14.04 Desktop 64bit ,当然选择Server会更好一些. 系统 ...

  7. ubuntu20.04下搭建android 8.1开发环境

    ubuntu20.04下搭建android 8.1开发环境 代码下载 解压代码 安装工具 编译代码 总结 最近主动失业,在家无聊,想搞块开发板玩玩android 9.0系统,但最后只在闲鱼上入了块fi ...

  8. Ubuntu 14.04 LAMP搭建(Apache 2.47+MySQL 5.5+PHP5.5)

    Ubuntu 14.04 LAMP搭建(Apache 2.47+MySQL 5.5+PHP5.5) 原文:Ubuntu LAMP搭建 为了数据库课程设计,只好自己搭一个数据库系统,采用LAMP方式. ...

  9. linux notepad 安装教程,Ubuntu 15.04/14.10/14.04下安装和卸载Notepad++(notepadqq)

    Ubuntu下的Notepad++也就是notepadqq,比较适合刚从Windows平台转移到Linux平台的用户使用,如果你一直在Windows下使用的是nodepad++,那么推荐你在Linux ...

最新文章

  1. mysql的altertable_mysql 的 alter table 操作性能小提示
  2. XML+SQL=数据库的未来?
  3. Oracle高级查询
  4. 自己写 localtime 函数(含完整注释,代码)转载
  5. 在Java中设计和使用自己的注解(转载)
  6. SAP Fiori Launchpad tile点击之后,后台的调整url解析机制
  7. es6 async函数的实现原理
  8. ARP欺骗报文是这个样子的
  9. 小米6twrp最新第三方rec_小米5(gemini:双子座)刷机
  10. 同济大学 线性代数 第六版 pdf_【课后习题答案】工程数学线性代数同济第六版+课后习题答案...
  11. BXP无盘WINXP优化精华篇(转)
  12. 如何安装pandas包
  13. 5大原因告诉你,Python程序员为何如此难招!
  14. MSF(Metasploit)渗透测试---黑客工具使用指南
  15. Kotlin开发遇到java.lang.VerifyError问题记录
  16. Java变态题目(持续更新)
  17. 打造全球TOD典范城市!成都准备这么干
  18. 得到QB的20种方法
  19. 分享一个最近github上比较热门的javaScript-questions
  20. java计算机毕业设计网上商城系统演示录像源码+系统+数据库+lw文档+mybatis+运行部署

热门文章

  1. 国行ps4服务器维护,不能登录其地区的PSN代表什么
  2. python实验指导书答案函数代码复用_#Python学习笔记(5)函数和代码重用,复用
  3. 最近公共祖先_LeetCode 236. 二叉树的最近公共祖先
  4. python的常量和变量_python中的常量和变量代码详解
  5. 【机器学习-西瓜书】二、偏差-方差分解;泛化误差
  6. Java实验9 T5. 给当前的类文件添加行号拷贝到txt文件
  7. CSSSCSS的学习笔记
  8. Linux文件权限管理 chmod 读、写、可执行
  9. ROS indigo在Ubuntu上的安装教程
  10. mac 上使用docker