zoukankan      html  css  js  c++  java
  • ubuntu下搭建python2.7+PyQt5并实现一个小词典

    在开始之前,先要介绍一下我的环境-->ubuntu13.10。其他的环境将在下面讲述如何搭建

    PyQt5的安装:

        在pyqt的官网上二进制包只有windows的,别的系统需要自己手动编译pyqt的源代码。我看了一下windows下pyqt5的安装包的列表,发现只有PyQt5-5.1.1-gpl-Py3.3-Qt5.1.1*,让我误以为pyqt5只有python3的版本,后来才发现其实不是这样的= = 

        在官网下载好源代码后,安装编译代码过程比较繁琐,主要是会遇上一些依赖的问题。我直接把整个下载,编译,安装过程写成一个脚本了,只要在终端执行这个脚本就会完成PyQt的安装工作。脚本我没测试过,大家谨慎使用:

    #!/bin/sh
    #This bash script is created by kongkongyzt and you can contact with me 
    #when you have trouble running.E-mail:kongkongyzt@gmail.com
    #                                                         Nov 29 2013
    
    echo "###############################################################"
    echo "Start the installation of sip,which is an import tool to call "
    echo "gcc compile source code of pyqt into binary code"
    echo "###############################################################"
    wget http://sourceforge.net/projects/pyqt/files/sip/sip-4.15.3/sip-4.15.3.tar.gz
    tar -xzf sip-4.15.3.tar.gz
    cd sip-4.15.3&&python configure.py --platform linux-g++&&make&&sudo make install
    echo "###############################################################"
    echo "Start the installation of pyqt "
    echo "It will take some time because we need to compile the souece code"
    echo "###############################################################"
    wget http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.1.1/PyQt-gpl-5.1.1.tar.gz
    tar -xzf PyQt-gpl-5.1.1.tar.gz
    #This step is import or you will recive error on include<python.h>, details can be found here http://stackoverflow.com/questions/17698877/fatal-error-while-compiling-pyqt5-python-h-does-not-exist
    sudo ln -s /usr/include/python2.7 /usr/local/include/python2.7
    cd PyQt-gpl-5.1.1&& python configure.py&&make&&make install
    echo "###############################################################"
    echo "All the installation has done! please check your installation"
    echo "###############################################################"

    之后打开python shell 试试这句会不会报错:import PyQt5 如果没报错说明安装成功了

    这些做好后我们还需要下载并安装qt-creator,这个去qt-project.org官网下载就好了。安装这个的目的是使用里面的qt designer来拖控件以快速完成软件界面的设计。

    安装完qt-creator后打开并新建一个项目,然后双击里面的ui文件,就会进入到一个可以拖拉控件的模式了,把控件拖拉成合适的样子,保存退出,可以在项目的文件夹下找到这个ui文件,打开后你可以发现其实这是一个xml文件,接下来,我们要把这个xml文件转换成python代码,过程很简单,终端输入命令 pyuic5 -x -o XXX.py xx.ui,其中xx分别代表你想生成的py文件的名字和原来ui文件的名字

    命令执行后你会发现在当前目录下生成了一个XX.py文件,试试python xx.py运行这个python文件,哇,你之前的设计就变成了真真实实的python实现的代码了

    但是现在有个问题,那就是如果我想要把这个py分享给朋友,但是他们的电脑上并没有安装pyqt怎么办?

    很简单,在ubuntu的软件中心搜索cxfreeze并安装

    Linux比windows好的地方之一就是有一个强大的包管理器,一般的开发用的软件包可以在源里面轻松获得和安装,这也是我选择Linux的众多原因之一。cxfreeze的官方只有centos的rpm包,所以要不你就下载源代码编译安装,要不你就直接在ubuntu的软件源里面安装吧~我想绝大多数人都会选后者的

    cxfreeze安装完成后,执行cxfreeze xx.py 会在当前目录下生成一个dist文件夹,里面有一个二进制文件,点击这个文件就可以看到刚才的界面弹出来了,这说明你可以将这个文件夹发送给你的朋友,和你的朋友分享你写的这个软件,即使TA电脑上没有装pyqt

    可能你会发现你双击这个二进制文件并没有反应,没关系,在你的py文件的前面写上这么一句 import sip,重新执行cxfreeze xx.py就好了,这下你再点击这个新生成的二进制文件,应该就没有问题了

    下面分享我自己用PyQt5+python2.7写的一个有道翻译的小软件:

    # -*- coding: utf-8 -*-
    from PyQt5 import QtCore, QtGui, QtWidgets
    import urllib2
    import xml.etree.cElementTree as ET
    import sip
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(400, 300)
            self.centralWidget = QtWidgets.QWidget(MainWindow)
            self.centralWidget.setObjectName("centralWidget")
            self.pushButton = QtWidgets.QPushButton(self.centralWidget)
            self.pushButton.setGeometry(QtCore.QRect(70, 210, 80, 23))
            self.pushButton.setObjectName("pushButton")
            self.textEdit = QtWidgets.QTextEdit(self.centralWidget)
            self.textEdit.setGeometry(QtCore.QRect(20, 40, 351, 161))
            self.textEdit.setObjectName("textEdit")
            self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
            self.pushButton_2.setGeometry(QtCore.QRect(220, 210, 80, 23))
            self.pushButton_2.setObjectName("pushButton_2")
            self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
            self.lineEdit.setGeometry(QtCore.QRect(80, 10, 291, 23))
            self.lineEdit.setObjectName("lineEdit")
            self.label = QtWidgets.QLabel(self.centralWidget)
            self.label.setGeometry(QtCore.QRect(20, 10, 51, 21))
            self.label.setObjectName("label")
            MainWindow.setCentralWidget(self.centralWidget)
            self.menuBar = QtWidgets.QMenuBar(MainWindow)
            self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 21))
            self.menuBar.setObjectName("menuBar")
            MainWindow.setMenuBar(self.menuBar)
            self.mainToolBar = QtWidgets.QToolBar(MainWindow)
            self.mainToolBar.setObjectName("mainToolBar")
            MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
            self.statusBar = QtWidgets.QStatusBar(MainWindow)
            self.statusBar.setObjectName("statusBar")
            MainWindow.setStatusBar(self.statusBar)
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "有道小词典"))
            self.pushButton.setText(_translate("MainWindow", "查询"))
            self.pushButton_2.setText(_translate("MainWindow", "退出"))
            self.label.setText(_translate("MainWindow", "单词:"))
        
        def get_result(self):
            url='http://fanyi.youdao.com/openapi.do?keyfrom=isailfish&key=1053023538&type=data&doctype=xml&version=1.1&q='+urllib2.quote(self.lineEdit.text().encode('utf8'))
            data=urllib2.urlopen(url).read()
            root=ET.fromstring(data)
            result1=root[3][1]
            da=[]
            for i in result1:
                da.append(i.text)
            foo='
    
    '.join(da)
            self.textEdit.setText('
    '+foo)
        
        def exit(self):
            exit()
        
        def bindevent(self):
            self.pushButton.clicked.connect(self.get_result)
            self.pushButton_2.clicked.connect(self.exit)
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        ui.bindevent()
        MainWindow.show()
        sys.exit(app.exec_())
  • 相关阅读:
    Java 练习(获取两个字符串中最大相同子串)
    STM32F103 实现 简易闹钟小程序
    STM32F103 实现 LCD显示年月日时分秒星期 并可逐值修改的日期 小程序
    Docker报错之“Failed to get D-Bus connection: Operation not permitted”
    数据结构解析
    每天一条DB2命令-004
    每天一条DB2命令-003
    每天一条DB2命令-002
    ElasticSearch系列
    模块三 GO语言实战与应用-BYTES包与字节串操作(下)
  • 原文地址:https://www.cnblogs.com/kongkongyzt/p/3491406.html
Copyright © 2011-2022 走看看