CentOS6.5安装PyQt4并使用Pycharm开发

  • 基本环境搭建
# yum install gcc automake autoconf libtool make gcc-c++ libX* gstreamer-plugins-base-devel

其余可能缺少的包需要在安装过程中观察报错信息进行查阅

  • python2.7安装

CentOS6.5自带的python是2.6.6的,如果需要使用python2.7则要另外安装一个,因为系统的yum及一些软件又需要python2.6,所以折衷的办法是另外安装python2.7,不替代系统的python2.6。
系统自带的python2.6在/usr/bin/python2.6,lib位置在/usr/lib64/python2.6/site-packages
建议需要通过手动安装把python2.7安装到/usr/local/bin/python2.7,其lib位置对应在/usr/local/lib/python2.7/site-packages

  • 安装python2.7需要的模块
# yum groupinstall "Development tools"
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel
  • 下载编译安装python2.7
# wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
如果此链接失效则进入python官网选择python2.7的包下载即可
# tar zxvf Python-2.7.3.tar.bz2
解压到当前目录
# cd Python-2.7.3
进入解压后的目录
# sudo ./configure --prefix=/usr/local
配置时设置安装路径为/usr/local
# sudo make
# sudo make altinstall
注意是altinstall, 这样刚刚安装的python就在/usr/local/bin/python2.7,而系统的python仍然在/usr/bin/python2.6
  • (可选)安装python2.7的setuptools
# wget http://pypi.python.org/packages/source/d/distribute/distribute-0.6.27.tar.gz
# tar zxvf distribute-0.6.27.tar.gz
# cd distribute-0.6.27
# python2.7 setup.py install
这样就生成了/usr/local/bin/easy_install-2.7脚本,这个脚本用来安装python package,如:
# easy_install-2.7 virtualenv
  • (谨慎)修改python的link

在完成前面步骤后在终端输入python会进入系统自带的python2.6.6,而输入python2.7会进入手动安装的python2.7.3。如果希望在终端输入python即进入python2.7.3,则需要修改/usr/bin下的python软链接

# cd /usr/bin
# cp python python.backup
先做备份
# rm -rf python
删除掉
# ln -s /usr/local/bin/python2.7 python
将手动安装的python链接到此,此时在终端输入python即会进行手动安装的python2.7.3。同时系统中所有软件寻找python都会寻找到python2.7.3。此时就会出现开始说的问题,系统的yum和一些软件(比如ibus)需要python2.6.6。此时可以更改这些软件配置中寻找的python路径,比如
# vim /usr/bin/yum
将第一行的#!/usr/bin/python改成 #!/usr/bin/python2.6
其他软件同理,但因为此方法并不一定能适用所有软件,所以仅供参考,建议不做此调整。
后续安装pyqt时可以每次使用python2.7做python指令。
  • 安装PyQt SIP

下载pyqt sip: http://nchc.dl.sourceforge.net/project/pyqt/sip/,选择网页中最新版进行下载,文件名应为sip-4.x.tar.gz
解压后运行

# python2.7 configure.py
# sudo make
# sudo make install
  • 安装qt

下载qt: http://download.qt.io/official_releases/qt/4.8/,选择4.8.7或者更新版,然后选择qt-everywhere-opensource-src-4.8.x.tar.gz
解压后运行

# sudo ./configure
# sudo make
# sudo make install

三个步骤都需要较长时间进行
QT安装的目录在/usr/local/Trolltech/Qt-4.8.x。可以在…/Qt-4.8.x/bin下运行设计器designer
此时在终端直接输入qmake -v很有可能找不到命令,那么需要把qmake添加到path中。
先查看一下现有的path:

#echo path

然后把qmake的软链接添加到path中某一路径下

#ln -s /usr/local/Trolltech/Qt-4.8.x/bin/qmake /usr/local/bin

此时在终端输入qmake -v可直接得到详细信息

  • 安装PyQt

下载PyQt4: http://sourceforge.net/projects/pyqt/files/PyQt4, 然后展开/PyQt-4.x.x/PyQt-x11-gpl-4.x.x.tar.gz

# tar zxvf PyQt-x11-gpl-4.x.x.tar.gz
# cd PyQt-x11-gpl-4.x.x
# python2.7 configure.py
# sudo make
# sudo make install
安装完成后在python2.7中进行验证
# python2.7
>>> import PyQt4
如果没报异常则安装正确
  • 安装pycharm

在jetbrains官网下载PyCharm: pycharm-professional-2016.1.4.tar.gz

# tar zxvf pycharm-professional-2016.1.4.tar.gz -C /opt
解压到/opt下
# cd /opt/pycharm-2016.1.4/bin
进行安装路径
# ./pycharm.sh
运行pycharm
可创建此程序的软链接
  • 配置PyCharm使其包含PyQt4
File->Settings->Tools->External Tools->+号
Name: Qt Designer
Group: PyQt4
Program: /usr/local/Trolltech/Qt-4.x.x/bin/designer
Working directory: $ProjectFileDir$
点击OK,再点+号,继续添加
Name: PyUIC
Group: PyQt4
Program: /usr/local/bin/python2.7
Parameters: /usr/local/lib/python2.7/site-packages/PyQt4/uic/pyuic.py $FileName$ -o $FileNameWithoutExtension$.py
Working directory:$ProjectFileDir$
全部OK,此时在Tools->PyQt4下就有两条新增命令Qt Designer和PyUIC
  • 配置PyCharm使其能调用Python2.7
首先新建一个python project
File->Settings->Project: xxx->Project Interpreter->下拉箭头选择show all->点击+号选择/usr/local/bin/python2.7
切换解释器之后PyCharm需要等待一定时间的update才能进行Edit Configurations
  • 使用PyCharm配合PyQt4开发程序
    • 首先新建一个python project
    • 在PyCharm中选择Tools->PyQt4->Qt Designer打开Qt的设计界面
    • 根据需要设计界面并且将其保存到新建的python project目录下,这样切回到PyCharm时在根目录下refresh一下就能看到刚才保存的xx.ui的界面设计文件。
    • 右键xx.ui选择PyQt4->PyUIC,会在同级目录下生成同名的xx.py,如果已有此文件会覆盖更新。
    • 以界面中是一个Dialog为例,xx.py中会生成一个class Ui_Dialog(object)。其中有两个方法
    • > def setupUi(self, Dialog)
    • > def retranslateUi(self, Dialog)
    • 第一个方法接受一个Dialog然后在上面添加上刚才设计的界面上的所有控件。第一个方法里会调用第二个方法,在第二个方法中会设置Dialog上的所有文本。
    • 由于直接在Qt Designer里设置信号与信号槽的话,生成的将会是.h的C/C++语言用头文件,不方便直接供Python使用。所以使用PyQt开发时建议只设计界面并生成界面代码,界面上的事件响应等直接手写。
    • 这里推荐另写一个class继承Ui_Dialog类,然后在里面添加控件响应。这样不仅将界面显示与事件响应分开易于维护,也可以在更改ui重新生成界面代码后不至于产生过大影响。
    • 这里尝试去写个简单的主函数来调用界面生成的代码:
    • #test.py,此为test.ui通过PyUIC生成的代码,结构如下:
class Ui_Dialog(object):
    def setupUi(self, Dialog):
    def retranslateUi(self, Dialog)
# main.py, 此为主函数,调用test.py来显示界面
import sys #导入sys
from PyQt4 import QtGui  #导入QtGui
from test import Ui_Dialog  #导入test.py中的类
if __name__ == "__main__":  #当执行这个文件时
    app = QtGui.QApplication(sys.argv)  #生成一个app
    mainwindow = QtGui.QDialog()  #生成一个dialog
    ex = Ui_Dialog()  #生成包装dialog类的实例
    ex.setupUi(mainwindow)  #去包装这个dialog
    mainwindow.show()  #显示这个dialog
    sys.exit(app.exec())
  • yum使用的Python和开发用的Python不一致带来的问题

使用yum安装某些包时会安装到/usr/lib64/python2.6/site-packages下,而实际需要使用的python2.7中就会缺少,可通过复制包来解决
cp -r /usr/lib64/python2.6/site-packages/xxx /usr/local/lib/python2.7/site-packages/

发表评论