PYQT4 Python GUI 编写与 打包.exe程序
工作中需要开发一个小工具,简单的UI界面可以很好的提高工具的实用性,由此开启了我的第一次GUI开发之旅,下面将自己学习的心得记录一下,也做为学习笔记吧!!!
参考:http://www.qaulau.com/books/PyQt4_Tutorial/index.html
一,Python GUI开发之PYQT4
1,首先安装PYQT4
可以在 http://qunying.jb51.net:81/201704/tools/PyQt4_py2.7_x64_jb51.rar 这里,获得PyQt4的下载,请注意选择正确的Python版本和Python的位数。
下载解压之后,双击安装文件,下一步安装即可,选择好Python27的路径。
在 :C:\Python27\Lib\site-packages\PyQt4 (自动转换成你自己的路径)下面找到 ,这个程序即GUI开发的工具界面。(打开它你就可以拖拖拽拽实现GUI的开发了),如下图:
选择好窗口类型,点击“创建”就可以生成空白的窗口界面,你就可以在上面开发你自己的UI界面了。
2,将.ui 文件转换成.py的代码文件:
编辑好ui界面后,点击保存,会生成一个.ui格式的文件。
在CMD下执行如下命令:pyuic4 xxx.ui -o xxx.py 这样就会生成相应的Python代码文件。
3. 从你的IDE中打开Python代码,对其进行功能实现即可.在这里贴出我的代码,仅供参考学习
首先,我做的是一个实现usb自动通断的工具;界面是这样的
然后,代码如下:
# -*- coding: utf-8 -*-import os,sys from PyQt4 import QtCore, QtGui import ctypes import time import threadingtry:_fromUtf8 = QtCore.QString.fromUtf8 except AttributeError:def _fromUtf8(s):return stry:_encoding = QtGui.QApplication.UnicodeUTF8def _translate(context, text, disambig):return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError:def _translate(context, text, disambig):return QtGui.QApplication.translate(context, text, disambig)class Ui_Dialog(object):def setupUi(self, Dialog):Dialog.setObjectName(_fromUtf8("Dialog"))Dialog.resize(397, 244)self.groupBox_3 = QtGui.QGroupBox(Dialog)self.groupBox_3.setGeometry(QtCore.QRect(10, 20, 381, 211))self.groupBox_3.setFocusPolicy(QtCore.Qt.WheelFocus)self.groupBox_3.setAcceptDrops(False)self.groupBox_3.setAutoFillBackground(True)self.groupBox_3.setInputMethodHints(QtCore.Qt.ImhNone)self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))self.label_5 = QtGui.QLabel(self.groupBox_3)self.label_5.setGeometry(QtCore.QRect(10, 30, 51, 21))self.label_5.setLineWidth(1)self.label_5.setMidLineWidth(1)self.label_5.setTextFormat(QtCore.Qt.AutoText)self.label_5.setAlignment(QtCore.Qt.AlignCenter)self.label_5.setWordWrap(True)self.label_5.setMargin(0)self.label_5.setObjectName(_fromUtf8("label_5"))self.label_6 = QtGui.QLabel(self.groupBox_3)self.label_6.setGeometry(QtCore.QRect(10, 70, 51, 21))self.label_6.setLineWidth(1)self.label_6.setMidLineWidth(1)self.label_6.setTextFormat(QtCore.Qt.AutoText)self.label_6.setAlignment(QtCore.Qt.AlignCenter)self.label_6.setWordWrap(True)self.label_6.setMargin(0)self.label_6.setObjectName(_fromUtf8("label_6"))self.spinBox = QtGui.QSpinBox(self.groupBox_3)self.spinBox.setGeometry(QtCore.QRect(80, 70, 70, 22))self.spinBox.setMaximum(10000)self.spinBox.setValue(60)self.spinBox.setObjectName(_fromUtf8("spinBox"))self.label_7 = QtGui.QLabel(self.groupBox_3)self.label_7.setGeometry(QtCore.QRect(10, 110, 51, 21))self.label_7.setLineWidth(1)self.label_7.setMidLineWidth(1)self.label_7.setTextFormat(QtCore.Qt.AutoText)self.label_7.setAlignment(QtCore.Qt.AlignCenter)self.label_7.setWordWrap(True)self.label_7.setMargin(0)self.label_7.setObjectName(_fromUtf8("label_7"))self.spinBox_2 = QtGui.QSpinBox(self.groupBox_3)self.spinBox_2.setGeometry(QtCore.QRect(80, 110, 70, 22))self.spinBox_2.setMaximum(10000)self.spinBox_2.setValue(2)self.spinBox_2.setObjectName(_fromUtf8("spinBox_2"))self.radioButton = QtGui.QRadioButton(self.groupBox_3)self.radioButton.setGeometry(QtCore.QRect(80, 30, 89, 21))self.radioButton.setAutoRepeat(False)self.radioButton.setObjectName(_fromUtf8("radioButton"))self.pushButton = QtGui.QPushButton(self.groupBox_3)self.pushButton.setGeometry(QtCore.QRect(280, 110, 70, 21))self.pushButton.setObjectName(_fromUtf8("pushButton"))self.progressBar = QtGui.QProgressBar(self.groupBox_3)self.progressBar.setGeometry(QtCore.QRect(10, 170, 361, 23))self.progressBar.setProperty("value", 0)self.progressBar.setObjectName(_fromUtf8("progressBar"))#以上代码都是自动生成的,没有什么难度 #下面的代码是主要是对控件功能的实现 self.radioButton.toggled.connect(self.changeUSBstatus)self.pushButton.clicked.connect(lambda:self.usbSwitchThreads()) # self.pushButton.connect(self.pushButton, SIGNAL("clicked"),self.changeUSBstatus()) # QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.pushButton.toggle) self.retranslateUi(Dialog)QtCore.QMetaObject.connectSlotsByName(Dialog)def retranslateUi(self, Dialog):Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))self.groupBox_3.setTitle(_translate("Dialog", "USB通断控制", None))self.label_5.setText(_translate("Dialog", "初始状态", None))self.label_6.setText(_translate("Dialog", "间隔(s)", None))self.label_7.setText(_translate("Dialog", "切换次数", None))self.radioButton.setText(_translate("Dialog", "接通/断开", None))self.pushButton.setText(_translate("Dialog", "点击执行", None))def changeUSBstatus(self):if self.radioButton.isChecked():USBcontrol().connectUsb()else:USBcontrol().disconnectUsb()def stopUsbSwitch(self):self.spinBox_2.setValue(0)def excuteUsbSwitch(self):self.pTime=self.spinBox.value()self.eTimes=self.spinBox_2.value()self.progressBar.setMinimum(0) self.progressBar.setMaximum(self.eTimes)for i in range(self.eTimes): time.sleep(int(self.pTime))USBcontrol().connectUsb()time.sleep(int(self.pTime))USBcontrol().disconnectUsb() self.progressBar.setValue(i+1) def usbSwitchThreads(self):threadsList=[]t = threading.Thread(target=self.excuteUsbSwitch,args=() )threadsList.append(t)for t in threadsList:t.setDaemon(True)t.start() class USBcontrol:def __init__(self):resDict={0:"成功",1:""}self.resDict = resDictdllPath = os.path.abspath(os.path.dirname(__file__))self.objdll = ctypes.windll.LoadLibrary(dllPath+r'\usbplug.dll')self.hdl = self.objdll.USBPLUG_Open(1)def connectUsb(self):res = self.objdll.USBPLUG_Set(self.hdl, 1) #连接USBprint("连接 USB " + self.resDict[res])def disconnectUsb(self):res = self.objdll.USBPLUG_Set(self.hdl, 0) #断开USBprint("断开 USB " + self.resDict[res]) def __del__(self):self.objdll.USBPLUG_Close(self.hdl)if __name__ == "__main__": app = QtGui.QApplication(sys.argv) Form=QtGui.QWidget()main=Ui_Dialog()main.setupUi(Form)Form.show()sys.exit(app.exec_())
ok, 以上就是pyqt4的相关使用,这里应用的比较简单,更加深入的使用还需要继续学习。。。
二,将.py 文件打包成.exe可执行程序
这里我用到的Pyinstaller这个模块,首先,需要安装pyinstaller; 安装方法推荐 使用 pip install pyinstaller(由于这个功能的实现还需要依赖一些其他的库,pip比较省事)
安装完成后,我们可以在如下路径找到Pyinstaller应用程序:C:\Python27\Scripts\
参考链接:http://jingyan.baidu.com/article/a378c960b47034b3282830bb.html
比较直接的方法就是使用Pyinstaller应用程序调用待发布脚本
即执行:pyinstaller.exe -w -F xx\xx\xxx.py
-w: 直接发布的exe应用带命令行调试窗口,在指令内加入-w命令可以屏蔽掉命令框(调试阶段可不加-w, 最终发布时加入-w参数)
-F: 这里是大写。使用-F指令可以把应用打包成一个独立的exe文件,否则是一个带各种dll和依赖文件的文件夹
-p :这个指令后面可以增加pyinstaller搜索模块的路径。因为应用打包涉及的模块很多。这里可以自己添加路径。不过经过笔者测试,site-packages目录下都是可以被识别的,一般不需要再手动添加
转载于:https://www.cnblogs.com/gaigaige/p/7593184.html
PYQT4 Python GUI 编写与 打包.exe程序相关推荐
- Python实现圣诞树、打包exe过程和遇到的问题
Python实现圣诞树.打包exe过程和遇到的问题 昨天看到CSDN推荐的Python生成圣诞树的博客,想着圣诞节也没给女朋友送过什么礼物,决定这个python脚本改成可执行文件然后作为她今年的礼物( ...
- 基于Pyinstaller库将Python项目包括 图片打包exe方法,本人已经实践多次
基于Pyinstaller库将Python项目包括 图片打包exe方法,本人已经实践多次 文章目录 基于Pyinstaller库将Python项目包括 图片打包exe方法,本人已经实践多次 一.前言 ...
- pyinstaller打包exe程序闪退问题修复
pyinstaller打包exe程序,点击程序,闪退,问题原因: pyinstaller版本过低 升级 pip install --upgrade pyinstaller pyinstaller从4. ...
- Python使用py2exe打包exe程序
py2exe可以将Python程序打包成exe程序,使得可以在没有Python环境的机器上运行. 首先编写一个hello_test.py文件: from time import sleepif __n ...
- python开发web应用打包exe,python开发web应用程序
python做web开发有哪些好处和不足 python适合Web开发吗?当然!python涉及的面十分广泛,不过使用python进行开发,你需要先掌握python的基础知识,然后学习python We ...
- Python实现多个excel文件合并源码及打包exe程序
##以下是源码filecombine.py,比较简单,有相应说明,也是结合别的代码自己修改的,用到的包需要提前装好. # -*- coding: utf-8 -*- import xlrd impor ...
- pyinstaller打包exe程序教程推荐及需要注意的点
Python PyInstaller安装和使用教程(详解版) http://c.biancheng.net/view/2690.html 1.pyinstaller打包程序中出错是正常的,报错要注意看 ...
- python启动远端 exe_python打包exe开机自动启动的实例(windows)
一.背景 简单的写个.exe程序,没必要去学习mfc.c++等,可以学习python.python可以轻易的调用windows的api,轻松的实现你想干的事.下面就是实现打包的exe文件开机自动运行. ...
- Anaconda使用pyinstaller打包exe程序体积过大
现象 使用的是Anaconda进行包管理,由于pyinstaller默认使用系统python环境变量来打包的,因此如果系统使用的python环境安装了太多的包,会导致最终输出的exe程序太大了,达到2 ...
最新文章
- 中国电子学会图形化四级编程题:加减法混合运算器
- linux查看某个端口是被哪个进程占用的
- VTK:创建字母频率的条形图用法实战
- 2021高考襄阳四中成绩查询,襄阳四中2020年高考成绩怎么样(高考喜报)
- Mysql递归查询,无限级上下级菜单
- 智能语音识别转文字字幕实时上屏直播系统
- stylesheettheme和 theme 的区别
- Redis远程连接出现An existing connection was forcibly closed by the remote host.远程主机强制关闭现有连接
- AX 2009 删除已经发出领料单的订单行
- 金蝶K3案例实验实际成本前台操作
- html最多显示两行,css 实现两行或多行文本溢出显示省略号(...)
- 为什么英语会有主格和宾格之分?比如:I、me
- 用PS通道消除人物脸部斑点的磨皮, 有什么技巧
- 同态加密在联邦计算中的应用
- 指标类数据标准如何定义?
- 第55篇 Chrome扩展USB开发(一)及PHP研究 Saturday
- 英语二-常用写作范文参考
- x86, x86-64, i386, IA32, IA64 区别
- Java——(高斯消去法/列主元消去法/LU消去)求解方程
- 2021-2027全球与中国操作面板市场现状及未来发展趋势
热门文章
- js理解 call( ) | apply( ) | caller( ) | callee( )
- Oracle 协议适配器错误
- xflash里的hello world程序
- linux逻辑卷管理
- [javaSE] 看博客学习java并发编程
- PHP--字符串处理函数
- Oracle conn 协议适配器错误解决
- easyui验证:validatebox
- 《网络规划设计师考试大纲》、《网络规划设计师教程》和《系统架构设计师教程》...
- 技术QA:如何安装并启用BITS和WebDAV?