ubuntu中配置pyqt4环境教程


Posted in Python onDecember 27, 2017

相机校准前需要设置wifi的mac地址和切换校准模式,之前写的命令行工具,去了工厂发现使用可能有障碍,就做了个小应用程序,用了两种方法,先看一下第一种(不想选择的)

使用Tkinter做图形界面

Tkinter写界面麻烦,文档资料也不是很多,这里只做代码展示

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
from Tkinter import *      # 导入 Tkinter 库
from tkMessageBox import *
import httplib
import re
 
class MainWindow:
  def __init__(self):
    root = Tk()
    root.title("工具")
    width = 500
    height = 300
    screenwidth = root.winfo_screenheight()
    screenheight = root.winfo_screenheight()
    size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
    root.geometry(size)
    root.minsize(width, height)
    root.maxsize(width, height)
 
    Label(root, height=4, width=14, text="扫描数据:").grid(row=0, column=0, sticky=W)
 
    self.name = StringVar()
    Entry(root, width=30, textvariable=self.name).grid(row=0, column=1, columnspan=2)
 
    b1 = Button(root, text="发送MAC数据", height=4, width=10, command=self.send)
    b1.grid(row=2, column=0, sticky=E)
 
    b2 = Button(root, text="切换校准模式", height=4, width=10, command=self.close)
    b2.grid(row=2, column=1, sticky=E)
 
    b3 = Button(root, text="清空", height=4, width=10, command=self.clear)
    b3.grid(row=2, column=2, sticky=E)
 
    root.mainloop()
 
  def send(self):
    if self.name.get() == '':
      showwarning("输入为空", "参数不能为空,请重新操作!")
    else:
      result = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", " ", self.name.get())
      self.httpSend(result)
 
  def close(self):
    self.httpDisconnect()
 
  def clear(self):
    self.name.set('')
 
  # 创建HTTP连接
  def httpSend(self, mac):
    httpClient = None
    # 进行操作
 
  # 创建HTTP连接
  def httpDisconnect(self):
    httpClient = None
    # 进行操作
 
if __name__ == '__main__':
  MainWindow()

使用PyQt4做图形界面

大学时候自学过一点Qt4.8.4的东西,所以比较倾向于用pyqt开发,跨平台,而且资料也比较齐全,特别是Qt脱离诺基亚后这几年发展迅猛,很多公司都开始采用Qt来开发图形界面应用了

首先配置环境

sudo apt-get install python-pip python2.7-dev libqt4-dev libqt4-dbg libqt4-gui libqt4-sql qt4-dev-tools qt4-doc qt4-designer qt4-qtconfig pyqt4-dev-tools

然后看代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sys
import httplib
import re
from PyQt4.QtCore import *
from PyQt4.QtGui import * #这里为了偷懒,用到啥导入啥
 
class MainWindow(QWidget):
 def __init__(self,parent=None):
 QWidget.__init__(self,parent)
 self.setWindowTitle(u'工具')
 mac = QLabel(u'扫描数据:')
 
 self.macEdit = QLineEdit()
 
 grid = QGridLayout()
 grid.addWidget(mac,1,0)
 grid.addWidget(self.macEdit,1,1)
 
 clear = QPushButton(u'清空')
 send = QPushButton(u'发送')
 disconnect = QPushButton(u'断开')
 
 grid.addWidget(clear,2,1)
 grid.addWidget(send,3,1)
 grid.addWidget(disconnect,4,1)
 
 self.setLayout(grid)
 self.resize(550,200)
 screen = QDesktopWidget().screenGeometry()
 size = self.geometry()
 self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)
 self.connect(clear, SIGNAL('clicked()'), self.clearAction)
 self.connect(send, SIGNAL('clicked()'), self.sendAction)
 self.connect(disconnect, SIGNAL('clicked()'), self.httpDisconnect)
 
 def clearAction(self):
 self.macEdit.clear()
 
 def sendAction(self):
 macText = self.macEdit.text()
 if macText == '':
 msgBox = QMessageBox(QMessageBox.Warning,u'输入为空',u'参数不能为空,请重新操作!')
 msgBox.exec_()
 else:
 result = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", " ", unicode(macText))
 # print(u'mac地址为:%s' % result)
 self.httpSend(result)
 
 # 创建HTTP连接
 def httpSend(window,mac):
 httpClient = None
 try:
 response = httpClient.getresponse()
 if response.status == 200 and response.reason == 'OK':
 msgBox = QMessageBox(QMessageBox.Information,u'设置成功',u'相机MAC地址设置成功,请等待相机重新启动!')
 msgBox.exec_() 
 except Exception, e:
 # print e
 msgBox = QMessageBox(QMessageBox.Warning,u'操作失败',u'操作失败,请重新操作!')
 msgBox.exec_()
 finally:
 if httpClient:
 httpClient.close()
 
 # 创建HTTP连接
 def httpDisconnect(window):
 httpClient = None
 try:
 response = httpClient.getresponse()
 if response.status == 200 and response.reason == 'OK':
 msgBox = QMessageBox(QMessageBox.Information,u'断开成功',u'现在相机已经进入校准模式,可以进行校准!')
 msgBox.exec_() 
 except Exception, e:
  # print e
 msgBox = QMessageBox(QMessageBox.Warning,u'操作失败',u'操作失败,请重新操作!')
 msgBox.exec_()
 finally:
 if httpClient:
 httpClient.close()
#main
if __name__:
 app = QApplication(sys.argv)
  window = MainWindow()
  window.show()
  sys.exit(app.exec_())

安装打包程序

pip install pyinstaller

也可以源码安装,下载源码包,然后进入包目录,执行下面的命令(需要安装setuptools):

python setup.py install

安装完后,检查安装成功与否:

pyinstaller --version

安装成功后,就可以使用下面的命令了:

pyinstaller : 打包可执行文件的主要命令,详细用法下面会介绍。

pyi-archive_viewer : 查看可执行包里面的文件列表。

pyi-bindepend : 查看可执行文件依赖的动态库(.so或.dll文件)

pyi-… : 等等。

pyinstaller的语法:

pyinstaller [options] script [script ...] | specfile

最简单的用法,在和myscript.py同目录下执行命令:

pyinstaller pyqt.py

然后会看到新增加了两个目录build和dist,dist下面的文件就是可以发布的可执行文件,对于上面的命令你会发现dist目录下面有一堆文 件,各种都动态库文件和myscrip可执行文件。有时这样感觉比较麻烦,需要打包dist下面的所有东西才能发布,万一丢掉一个动态库就无法运行了,好 在pyInstaller支持单文件模式,只需要执行:

pyinstaller -F pyqt.py

你会发现dist下面只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的操作系统类似的系统的下面。

当然,pyinstaller还有各种选项,有通用选项,如-d选项用于debug,了解pyInstaller执行的过程;还有一些针对不同平台的选项,具体用法可以访问PyInstaller官方WIKI。

PyInstaller的原理简介

PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望 成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的库。在Linux操作系 统下,它主要用的binutil工具包里面的ldd和objdump命令。

PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。

可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其他包,或某个版本的Python,就可以直接运行了。

需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。

来看一下最后的界面

ubuntu中配置pyqt4环境教程

Python 相关文章推荐
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
浅谈MySQL中的触发器
May 05 Python
python判断图片宽度和高度后删除图片的方法
May 22 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
Python装饰器用法实例总结
Feb 07 Python
python实现彩票系统
Jun 28 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
pytorch自定义初始化权重的方法
Aug 17 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
详解Python中第三方库Faker
Sep 25 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
Python中Threading用法详解
Dec 27 #Python
SVM基本概念及Python实现代码
Dec 27 #Python
Python自定义函数定义,参数,调用代码解析
Dec 27 #Python
详解用Python处理HTML转义字符的5种方式
Dec 27 #Python
Python中使用支持向量机(SVM)算法
Dec 26 #Python
Python中支持向量机SVM的使用方法详解
Dec 26 #Python
详解python中的 is 操作符
Dec 26 #Python
You might like
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
javascript 事件处理程序介绍
2012/06/27 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
iscroll实现下拉刷新功能
2017/07/18 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
python读取xml文件方法解析
2020/08/04 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
追悼会子女答谢词
2014/01/28 职场文书
党员公开承诺事项
2014/03/25 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
如何使用vue3打造一个物料库
2021/05/08 Vue.js