PyQT5初学(一)
PyQt5 是Digia的一套Qt5与python绑定的应用框架,同时支持2.x和3.x。本教程使用的是3.x。Qt库由Riverbank Computing开发,是最强大的GUI库之一 ,官方网站:www.riverbankcomputing.co.uk/news。
PyQt5是由一系列Python模块组成。超过620个类,6000和函数和方法。能在诸如Unix、Windows和Mac OS等主流操作系统上运行。PyQt5有两种证书,GPL和商业证书。
PyQt5类分为很多模块,主要模块有:
- QtCore 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用。
- QtGui 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类。
- QtWidgets
- QtMultimedia
- QtBluetooth
- QtNetwork
- QtPositioning
- Enginio
- QtWebSockets
- QtWebKit
- QtWebKitWidgets
- QtXml
- QtSvg
- QtSql
- QtTest
QtWidgets类包含了一系列创建桌面应用的UI元素。
QtMultimedia包含了处理多媒体的内容和调用摄像头API的类。
QtBluetooth模块包含了查找和连接蓝牙的类。
QtNetwork包含了网络编程的类,这些工具能让TCP/IP和UDP开发变得更加方便和可靠。
QtPositioning包含了定位的类,可以使用卫星、WiFi甚至文本。
Engine包含了通过客户端进入和管理Qt Cloud的类。
QtWebSockets包含了WebSocket协议的类。
QtWebKit包含了一个基WebKit2的web浏览器。
QtWebKitWidgets包含了基于QtWidgets的WebKit1的类。
QtXml包含了处理xml的类,提供了SAX和DOM API的工具。
QtSvg提供了显示SVG内容的类,Scalable Vector Graphics (SVG)是一种是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式(这句话来自于维基百科)。
QtSql提供了处理数据库的工具。
QtTest提供了测试PyQt5应用的工具。
#######################################################################################################
目标:python用的多了,使用python生产exe文件,做一些工具来使用时最为方便的。那么,不用再去找c++了,直接用python
今天,用PyQT5开发出适合自己使用GUI界面,自己用的顺手的才是最好的。
文件1.Form基类,PyQT_Form.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'PyQT_Form.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(753, 625)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(30, 160, 91, 41))
self.pushButton.setObjectName("pushButton")
self.textEdit = QtWidgets.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(30, 220, 701, 211))
font = QtGui.QFont()
font.setPointSize(20)
self.textEdit.setFont(font)
self.textEdit.setObjectName("textEdit")
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(550, 160, 81, 41))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(Form)
self.pushButton_3.setGeometry(QtCore.QRect(290, 40, 131, 51))
self.pushButton_3.setObjectName("pushButton_3")
self.toolButton = QtWidgets.QToolButton(Form)
self.toolButton.setGeometry(QtCore.QRect(30, 470, 91, 41))
self.toolButton.setObjectName("toolButton")
self.toolButton_2 = QtWidgets.QToolButton(Form)
self.toolButton_2.setGeometry(QtCore.QRect(550, 470, 81, 41))
self.toolButton_2.setObjectName("toolButton_2")
self.line = QtWidgets.QFrame(Form)
self.line.setGeometry(QtCore.QRect(10, 450, 741, 16))
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line") self.retranslateUi(Form)
self.pushButton.clicked.connect(Form.pushButton_click)
self.pushButton_2.released.connect(Form.pushButton_clear)
self.pushButton_3.clicked.connect(Form.pushButton_load_text)
self.toolButton.clicked.connect(Form.pushButton_up)
self.toolButton_2.clicked.connect(Form.pushButton_down)
QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "显示"))
self.pushButton_2.setText(_translate("Form", "消失"))
self.pushButton_3.setText(_translate("Form", "读取文件"))
self.toolButton.setText(_translate("Form", "上一个"))
self.toolButton_2.setText(_translate("Form", "下一个"))
文件2. 自定义功能实现,每次修改ui都会更改基类py文件,必须单独建立实现模块,main.py
"""
Function:GUI进入主函数
Author: dengyexun
DateTime:2018.11.17
"""
import sys
from PyQt5 import QtWidgets
from PyQT_Form import Ui_Form
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import * # 自定义类
class MyPyQT_Form(QMainWindow, QWidget, Ui_Form): def __init__(self):
"""
用父类初始化,建立ui
"""
super(MyPyQT_Form, self).__init__()
self.setupUi(self)
self.setWindowTitle('App')
self.setWindowIcon(QIcon('./resources/car.png'))
self.first_word = ''
self.last_word = ''
self.count = 0 QMainWindow.setFixedSize(self, 753, 625) # 实现pushButton_click()函数,textEdit是文本框的id
def pushButton_click(self):
self.textEdit.setText('我爱你') # 实现pushButton_clear()函数,清空
def pushButton_clear(self):
self.textEdit.clear() # 实现pushButton_up()
def pushButton_up(self):
self.count -= 1
content = self.lines[self.count]
self.textEdit.setText(content) # 实现pushButton_down()
def pushButton_down(self):
self.count += 1
content = self.lines[self.count]
self.textEdit.setText(content) # 实现pushButton_load_text(),读取文件内容
def pushButton_load_text(self):
print('load text...')
# 初始化这个实例,设置一些基本属性
dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter(QDir.Files)
# 当选择关闭的时候
if dlg.exec_():
# 拿到当前读取的文本
filenames = dlg.selectedFiles()
# 读取文本内容,设置到textEdit中来
with open(filenames[0], 'r', encoding='utf8') as fr:
self.lines = fr.readlines()
self.textEdit.setText(self.lines[0]) if __name__ == '__main__':
# 建立应用
app = QtWidgets.QApplication(sys.argv)
# 实例化
my_pyqt_form = MyPyQT_Form()
# 显示
my_pyqt_form.show()
# 直接退出程序的首选方法
sys.exit(app.exec_())
文件3 打包成exe,使用pyinstaller 打包main.py文件,gen_exe.py
"""
Function:打包py文件成exe
Author: dengyexun
DateTime:2018.11.19
"""
import os # 打包,打包好的exe在Scripts的dist文件夹下
def package_exe():
current_py = os.path.join(os.getcwd(), 'main.py')
print(current_py)
des_dir = os.chdir('D:\Python35\Scripts')
print(os.getcwd())
do_exe = 'pyinstaller.exe -F -w ' + current_py
r_v = os.system(do_exe) print('ok') if __name__ == '__main__':
package_exe()
os.system("pause")
GUI界面
PyQT5初学(一)的更多相关文章
- 用pyqt5简单实现Mqtt调试助手-初学python
最近在学习pyqt5,因为我们是做远程物联网设备的,所以就做个mqtt调试助手来练手.第一次做这种程序,没有加异常处理,会有很多不足,欢迎留言拍砖,直接上代码了 这个是程序入口, # 使用前先安装py ...
- pyqt5 QGraphicsView颜色动画问题(不兼容,运行不了动画)
初学动画.无敌踩坑,资料真的是太少了.....本坑是一个大坑,只有解决方法,但实质原因仍不清楚 在一篇资料中了解到我们可以通过QGraphicsView来实现动画QPropertyAnimation ...
- 用PyInstaller打包用PyQt5编写的python程序
0.背景 本弱初学PyQt5,写了一个GUI小程序,但在用PyInstaller打包时出现了不少问题,现将几个比较大的问题记录如下,希望以后能记住. 1. 资源打包 首先是资源打包的问题,我写的程序引 ...
- DDD初学指南
去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...
- gulp初学
原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js 配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)
[引子] 在PyQt5自带教程中,地址簿(address book)程序没有完全实现界面与业务逻辑分离. 本文我打算用eric6+PyQt5对其进行改写,以实现界面与逻辑完全分离. [概览] 1.界面 ...
- 初学Vue2.0--基础篇
概述: 鉴于本人初学,使用的编译器是webStorm,需添加对VUE的支持,添加方法可以参考 http://www.jianshu.com/p/142dae4f8b51. 起步: 1. 扎实的 Jav ...
- PyQt5+Python3.5.2-32bit开发环境搭建
1.基本环境. Window 8.1 64bit Python3.5.2-32bit.exe PyQt5 2.安装python. 去官网下载32位版本的python3.5.2(就是x86那个) 备 ...
随机推荐
- Android测试跑单个包脚本文件
脚本: adb shell monkey -p 应用包名 --throttle 随机事件间隔 -v -v -v -s 1 --ignore-security-exceptions --kill-pro ...
- vue中使用mockjs
第一步安装mockjs:npm i mockjs -S 在src目录下新建mock文件夹,文件夹添加test.js test.js内容如下: import Mock from 'mockjs'; co ...
- RESTFul basic introduction
http://www.ruanyifeng.com/blog/2011/09/restful.html
- apache下配置php环境
1. apache下载 http://httpd.apache.org/download.cgi 2. php下载 http://windows.php.net/download/ 3. 配置 apa ...
- .net页面生命周期【转】
.Net 页面生命周期IIS 所收到的对某 Microsoft ASP.NET 页面的每个请求都被移交给 ASP.NET HTTP 管线.HTTP 管线由一系列托管对象组成,这些对象按顺序处理该请求, ...
- Jdk1.8在CentOS7中的安装与配置
自从2014年3月19日甲骨文公司发布Java 8.0的正式版以来,面向对象的Java语言不仅朝着一个更好的方向发展,而且吸取了当前比较流行的函数式编程的特性——Java 8.0加入了函数式编程的特点 ...
- PHP错误 。Parse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULT
If you wan't to use the alternative syntax for switch statements this won't work: <div> <?p ...
- Windows驱动中通过MDL实现用户态与核心态共享内存
Windows驱动跑在核心态(Kernel mode),驱动的调用者跑在用户态.如何使用户态进程与核心态驱动共享内存呢 ? 我们知道32位Windows中,默认状态下虚拟空间有4G,前2G是每个进程私 ...
- MapReduce模型探究--总览
先从宏观上了解一下MR运行机制. 两个干活的: (1)jobtracher:管理和调度job (2)tasktracher: 执行job划分后的task client提交MR作业后,jobtrache ...
- RAID在数据库存储上的应用
随着单块磁盘在数据安全.性能.容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出现了,RAID把多块独立的磁 ...