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那个) 备 ...
随机推荐
- vux (scroller)上拉刷新、下拉加载更多
1)比较关键的地方是要在 scroller 组件上里加一个 ref 属性 <scroller :lockX=true height="-170" :pulldown-conf ...
- Apache安全配置基线指导
搜索关键词:Apache安全配置基线指导 参考链接: windows服务器下Apache 的降权 https://www.landui.com/help/show-1749.html
- [Maven]Maven中的一些基本概念
Pom文件中的groupId.artifactId.version和name,这三个元素定义了一个项目的基本的坐标,在Maven世界中,任何的jar.pom或者war都是基于这些基本的坐标惊醒区分. ...
- Python 网络爬虫
爬虫介绍 爬取图片 爬取文本 爬虫相关模块:re 爬虫相关模块:urllib 爬虫相关模块:urllib2 爬虫相关模块:cookielib 爬虫相关模块:requests 爬取需要登录的页面
- Linux命令之乐--wget
常见参数: 参数 作用 -b 后台下载模式. -P 下载到指定目录. -t 最大尝试次数. -c 断点续传 -p 下载页面内所有资源,包括图片.视频等. -r 递归下载 实例1,下载本站的所有文章 ...
- U3D 游戏引擎之游戏架构脚本该如何来写
这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难.这篇文章的目的是让哪些已经上手Unity3D游戏引 ...
- 不作死就不会死,微软强行插入NO-IP
微软啊微软,你这是何苦来着. 事情经过大致是这样的,微软向美国法院提出起诉No-IP名下22个常用的子域名被恶意软件的作者滥用,要求法官裁定由微软接管No-IP名下的这22个子域名,以便其可以过滤恶意 ...
- smarty模板文件书写javascript代码
在smarty文件里直接写javascript代码时候,造成500错误. javascript代码有很多的{}在同一行,而{}也是smarty引擎解析模板的关键标识符,smarty将对其进行分析,这时 ...
- 在javaweb的项目当中实现随机数字的生成
首先,需要在javaweb的项目当中新建一个Servlet文件,然后再web.xml中配置一下: 这样运行的时候就可以通过“http://localhost:8080/Response/Respons ...
- 【LeetCode OJ】Remove Element
题目:Given an array and a value, remove all instances of that value in place and return the new length ...