Python Gui开发(PyQt5)

一、Python GUI介绍

User Interface,简称 GUI,又称图形用户接口;是指采用图形方式显示的计算机操作用户界面

GUI图形用户界面(Graphical

User Interface,简称 GUI,又称图形用户接口;是指采用图形方式显示的计算机操作用户界面

Python 作为脚本语言,起初并不具备GUI工具,但由于本身具有良好的可拓展性,目前有相当多的GUI在python中使用

Python 常用GUI控件集有PyQt、Tkinter、wxPython、PyGUI、Kivy。

其中PyQt是Qt为python专门提供的GUI扩展。

二、常用GUI对比

image

三、PyQt介绍及开发实践
PyQt 是一个用于创建GUI应用程序的跨平台的工具包,它将Python编程语言和Qt库 成功融合在一起。QT库目前是最强大的GUI库之一。

PyQt可以运行在所有主流操作系统上,包括UNIX,Windows和Mac OS 。

自从Qt移植到Python 上形成PyQt以来,已经发出PyQt3, PyQt4, PyQt5

PyQt提供GPL版和商业版

(1)安装:

Ubuntu下:
uPyqt库: sudoapt-get install python-pyqt5
uQt-designer: sudo apt-get install qt5-designer
upyuic5 : sudo apt install pyqt5-dev-tools
uPyInstaller : pip install PyInstaller

Windows下:
进入pip目录(cd C:\Python34\Scripts)
PyQt5库:
pip3install SIP
pip3install PyQt5
PyInstaller : pip install PyInstaller

(2)开发过程介绍(以下均以windows下为例)
1、Qt Designer 画图(Ctrl+R 预览) .ui
2、.ui转换为.py
方法:pyuic5 -o a.py a.ui
3、逻辑文件视情况开发完成业务逻辑
4、pyinstaller 打包.py转换为.exe(windows下可运行文件)

(3)Pyinstaller
Pyinstaller把python解释器和脚本打包成一个可执行文件,和编译成真正的机器代码是两回事。
打包后的可执行文件不具备可移植性,若要在不同操作系统上运行,就必须在该系统上重新进行打包
安装pip install PyInstaller
配置环境变量:
QT_QPA_PLATFORM_PLUGIN_PATH
C:\Python34\

image.png

image.png

不配置环境变量,点击打包后的.exe运行Lib\site-packages\PyQt5\plugins
注:后直接闪退
提示:This application failed to start
because it could not find or load the Qt platform plugin “windows”.
打包命令:pyinstaller-F -pC:\python34;C:\Python34\Lib\site-packages\PyQt5; call_tools.py
•-F,-onfile .打包成一个.exe文件
•-p,依赖包所在文件

四、实践代码
(1)pyqt designer画图

image

(2)转换为.py文件
pyuic5 -o firstPyQt51.py firstPyQt51.ui

生成的firstPyQt51.py如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
   def setupUi(self, Form):
       Form.setObjectName("Form")
       Form.resize(400, 300)
       self.pushButton = QtWidgets.QPushButton(Form)
       self.pushButton.setGeometry(QtCore.QRect(140, 60, 99, 27))
       self.pushButton.setObjectName("pushButton")
       self.retranslateUi(Form)
       self.pushButton.clicked.connect(self.firtPyQt5_button_click)
       QtCore.QMetaObject.connectSlotsByName(Form)

   def retranslateUi(self, Form):
       _translate = QtCore.QCoreApplication.translate
       Form.setWindowTitle(_translate("Form", "Form"))
       self.pushButton.setText(_translate("Form", "PushButton"))

   #接下修改下firstPyQt5.py文件,主要是去实现slot函数,因为之前在QtDesigner里没有实现,让它弹出一个消息框

   def firtPyQt5_button_click(self):
       QtWidgets.QMessageBox.information(self.pushButton,"标题","这是第一个PyQt5 GUI程序")

(3)编写执行excute.py文件
excute.py内容如下

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget    #导入相应的包
from PyQt5.QtWidgets import QApplication , QMainWindow
from firstPyQt51 import *

if __name__ == '__main__':
   """
   主函数
   """
   app = QApplication(sys.argv)
   #app = QApplication(sys.argv),每一个pyqt程序必须创建一个application对象,
   #sys.argv是命令行参数,可以通过命令启动的时候传递参数。
   mainWindow = QMainWindow()
   #生成过一个实例(对象), mainWindow是实例(对象)的名字,可以随便起。
   ui = Ui_Form()
   ui.setupUi(mainWindow)
   mainWindow.show()  #用来显示窗口
   sys.exit(app.exec_())#exec_()方法的作用是“进入程序的主循环直到exit()被调

(4)执行python excute.py后点击”PushButton"弹出以下界面

image

注意:如出现以下2个问题,请检查python,安装模块,电脑位数是否一致(64/32位)

ImportError: DLL load failed: %1 不是有效的 Win32 应用程序
ImportError: DLL load failed: %1 找不到指定的模块
出现以上问题,卸载后请安装重试,再次执行以下重试
1) 切换到python安装目录,cd C:\Python36
2) pip3 install SIP
3) pip3 install PyQt5 
注意:电脑位数,python 位数,PyQt5库的位数对应

以上欢迎指正~~~
参考书籍:PyQt5快速开发和实践

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容