文章目录

  • 工具
  • GUI界面开发
  • 环境配置
  • 第一个pyqt窗口
  • 组件常用属性
  • 常用操作
  • 信号与槽函数
  • PyQt5 功能模块

工具

tkinter,python 官方使用的标准库,开源、稳定、控件少;
pyside2 & pyqt5,基于Qt的python第三方库,控件较多、发布的软件较大。

GUI界面开发

python 中支持GUI界面开发的库PyQt5、tkinter等。
要学习的内容:

  1. 基本程序结构
  2. 控件的特性及使用、布局
  3. 资源的加载
  4. 事件与信号、动画
  5. 界面跳转
  6. 设计工具使用
  7. 其他
    网络、多线程、数据库、文件、绘图、多媒体、定时器、定位

pyqt5官网

pyqt5模块

Pycharm新建文件自带默认信息

from PyQt5.QtWidget import QLabel,QPushButton
from PyQt5.QGui import QIcon

qt for python
qt是C++的图形界面开发框架

环境配置

python 3.6.9
pycharm
pyqt5

  1. 配置pip 安装包的国内镜像
# 清华源
https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里云
https://mirrors.aliyun.com/pypi/simple
# 中科大
https://pypi.mirrors.ustc.edu.cn/simple

配置源:

# 配置pip 的源镜像
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/# 安装依赖包, 不再需要使用-i指定镜像地址
pip install xxx

也可以配置pycharm,然后从pycharm安装依赖工具。



 
 
安装依赖库

pip install pyqt5-tools
pip install pyqt5designer

安装好后,需要配置设计器的路径:

  1. 找到designer.exe的路径 D:\Anaconda3\Lib\site-packages\QtDesigner\designer.exe
  2. 配置

    工作目录必须为$ProjectFileDir$
  3. 在pycharm》 tools》 External tool》 Qt Designer
    也可以在文件上右键
  4. 点击“创建”, 创建第一个应用窗口,并命名,如helloWorld.ui,这种文件python无法识别,需要配置python解释器
  5. settings>tools>external tools> +
    将.ui文件转为python可识别的文件:
    python解释器
    参数 -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py,将xxx.ui转为xxx.py
    $FileDir$
  6. 然后找到xx.ui,右键》external tools》PyUic
    即可以将xxx.ui转为python文件

第一个pyqt窗口

纯程序-面向过程

# __author__ = "laufing"# 导包
# from PyQt5.Qt import *   导入所有的类, 占用内存
from PyQt5.QtWidgets import QApplication   # 应用控件
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QPixmap
import sys# 1.创建应用程序
app = QApplication(sys.argv)
print("接收的命令行参数:", app.arguments())
# print("全局的应用程序对象:", qApp)# 2. 控件操作  创建控件对象,设置大小、样式、位置  事件和信号处理
window = QWidget()  # 创建空白控件,此时为顶级控件,默认带有装饰(标题栏、关闭按钮等),每一个顶级控件都是一个窗口(装饰标题栏)
window.setWindowTitle("laufing")  # 窗口标题
window.resize(500, 400)  # 调整窗口大小
window.move(300, 300)  #  移动窗口位置# 创建子控件对象,并放入 父控件中
label = QLabel(window)  # 实例化一个标题控件,放入window窗口控件中
label.setText("文本控件")
label.move(20, 30)# logo 图标
icon = QIcon()
icon.addPixmap(QPixmap("./imgs/dog.jpg"), QIcon.Normal, QIcon.Off) # 添加Pixmap对象
# 顶级控件 才可以操作窗口的 title、icon
window.setWindowIcon(icon)# 显示
window.show()
# 3. app.exec_()  进入消息循环,保证程序一直运行,监听用户的动作
exit_code = app.exec_()
# 退出程序,并传入退出码
sys.exit(exit_code)


注意:
一个pyqt程序必须要创建一个应用程序,并进入主循环;
一个应用程序可以显示多个顶级控件,没有父控件的顶级控件默认不显示,调用show显示;
一个子控件要放入一个父控件,并默认展示;
以上基本的代码结构,每次都写一遍的话,很麻烦,可以设置代码片段(活动模板):后续输入简写,就可以补全!

纯程序-面向对象版
将控件的操作封装到类中:

# utils.py
# __author__ = "laufing"from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QLabel
from PyQt5.QtGui import QIcon, QPixmap
import sys# 定义自己的控件类
class Window(QWidget):def __init__(self):super().__init__()# 设置窗口标题self.setWindowTitle("laufing")self.resize(300, 400)self.move(400, 400)self.set_ui()def set_ui(self):# 添加文本label = QLabel(self)label.setText("测试控件")# 添加图标icon = QIcon()icon.addPixmap(QPixmap("./imgs/dog.jpg"), QIcon.Normal, QIcon.Off)self.setWindowIcon(icon)if __name__ == '__main__':   # 作为主程序执行时,才执行这里# 创建app对象app = QApplication(sys.argv)# 创建控件窗口window = Window()# 显示window.show()# 消息循环sys.exit(app.exec_())

设置为活动模板

设计工具实现

  1. 打开pycharm, 点击“tools”>external tools > Qt Designer
    Ctrl + s 保存
    Ctrl + n 新建 并拖入组件对象
    Ctrl + r 预览效果

  2. 保存为HelloWorld.ui

  3. 转为python文件,右键》external tools>PyUic

  4. 编写py文件,使其运行

# 创建的对话框  加入如下代码
if __name__ == '__main__':import sys# 创建一个app实例,并传入系统参数,用于退出app = QtWidgets.QApplication(sys.argv)# 创建一个对话框,作为父控件dialog = QtWidgets.QDialog()# 实例化一个ui对象ui = Ui_Dialog()# 设置ui界面的父窗口ui.setupUi(dialog)# 主窗口显示dialog.show()# 退出sys.exit(app.exec_())

创建的主窗口,则添加如下代码:

# 将xxx.ui转为xxx.py   然后加入如下代码,运行即可
if __name__ == '__main__':import sys# 创建app实例对象app = QtWidgets.QApplication(sys.argv)# 创建主窗口实例对象main_window = QtWidgets.QMainWindow()# 实例化UI对象ui = Ui_MainWindow()ui.setupUi(main_window)# 主窗口展示main_window.show()# 系统退出sys.exit(app.exec_())

组件常用属性

选中一个组件,可以查看其属性:

objectName, 控件的唯一标识,用来调用控件
geometry, 几何尺寸
windowTitle, 主窗口的标题
windowIcon,窗口图标, win+r 预览

windowOpacity, 不透明度 0-1
windowModality,窗口模态
enable, 窗口是否可用
mininumSize 最小化
maxinumSize 最大化
palette 背景色
cursor 鼠标样式
font 设置字体

常用操作

  1. 设置icon图标
# 实例化icon
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("xxx/dog.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
# 设置到主窗口中
MainWindow.setWindowIcon(icon)
  1. 设置背景色
# 方案1  css样式   选择objectName
MainWindow.setStyleSheet("#MainWindow{background-color: lightblue}")# 方案2 调色板
from PyQt5.QtCore import Qt
palette = QtGui.QPalette()
palette.setColor(QtGui.QPalette.Background, Qt.yellow)
MainWindow.setPalette(palette)
  1. 设置背景图
from PyQt5.QtWidgets import QMainWindow
# 1 单张响应式的背景图
win = QMainWindow()  # QWidget 就不能实现效果
win.setObjectName("MainWindow123")
win.setStyleSheet("#MainWindow123{border-image:url(./static/images/logos/dog.jpg)}")# 2 多次重叠的背景图
win.setStyleSheet("#MainWindow123{background-image:url(./static/images/logos/dog.jpg)}")# 图片的重复
win.setStyleSheet("#MainWindow123{background-image:url(./static/images/logos/dog.jpg);\background-repeat:repeat-x;}")# 3
# 背景图
from PyQt5.QtGui import QPalette
p = QPalette()
p.setBrush(QPalette.Background, QBrush(QPixmap('./static/images/logos/dog.jpg')))MainWindow.setPalette(p)
  1. 设置不透明度
MainWindow.setWindowOpacity(0.6)
  1. 设置窗口的样式
#
MainWindow.setWindowFlags(QtCore.Qt.Dialog)
MainWindow.setWindowFlags(QtCore.Qt.Window)
MainWindow.setWindowFlags(QtCore.Qt.SplashScreen)
  1. 窗口的居中显示
# 获取屏幕的宽高
screen = QtWidgets.QDesktopWidget().geometry()
s_width = screen.width()
s_height = screen.height()
# 设置主窗口的尺寸,实现居中显示
# MainWindow.resize(400, 400)  重置窗口大小
MainWindow.setGeometry(s_width/2-200, s_height/2-200, 400, 400)

信号与槽函数


添加一个“控件”,点击“视图”----信号与槽编辑器,如下图:

然后Ctrl + R 预览 , 点击 实现关闭效果。
 
 
练习:实现点击,弹出信息提示框。

 # 信号与槽函数self.pushButton.clicked.connect(self.showMessage)def showMessage(self):QtWidgets.QMessageBox.information(self.MainWindow, "提示", "二狗", QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.Yes)  # 默认选中yes

https://www.bilibili.com/video/BV1vq4y1T7zj?p=7&vd_source=e4affaea5cd2c8a149efd2d8eb43672a pending 17…

PyQt5 功能模块

QtCore 模块包含了非GUI的功能设计。
这个模块被用来实现时间,文件和目录,不同数据类型,流,URL,mime类型,线程和进程。
QtGui 模块包含的类用于窗口化的系统结构,事件处理,2D绘图,基本图形,字体和文本。
QtWidgets 模块包含的类提供了一套UI元素来创建经典桌面风格用户界面。
QtMultimedia 模块包含的类用于处理多媒体内容和链接摄像头和无线电功能的API。
QtBluetooth 模块包含的类用于扫描蓝牙设备,并且和他们建立连接互动。
QtNetwork 模块包含的类用于网络编程,这些类使TCP/IP和UDP客户端/服务端编程更加容易和轻便。
QtPositioning 模块包含的类用于多种可获得资源的位置限定,包含卫星定位,Wi-Fi,或一个文本文件。
Enginio 模块用于解决客户端访问Qt云服务托管。
QtWebSockets 模块包含的类用于解决WebSocket通信协议。
QtWebKit 包含的关于浏览器的类用于解决基于WebKit2的支持库。
QtWebKitWidgets 模块包含的关于WebKit1的类基本解决浏览器使用基于QtWidgets应用问题。
QtXml 模块包含的类用于解析XML文件。这个模块提供SAX和DOM API解决方法。
QtSvg 模块提供类用于显示SVG文件内容。Scalable Vector Graphics (SVG) 是一种语言,
用XML来描述二维图形和图形应用程序。
QtSql模块提供类驱动数据库工作。
QtTest 模块包含了方法提供PyQt5应用的单元测试

Python GUI 编程-基础相关推荐

  1. Python编程实例-Tkinter GUI编程基础超级详解

    Tkinter GUI编程基础超级详解 1.什么是Tkinter Python 有很多 GUI 框架,但 Tkinter 是唯一内置到 Python 标准库中的框架. Tkinter 有几个优势. 它 ...

  2. linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第16篇文章,第二阶段的课程:Python基础知识:PYthon中的用户交互.Python GUI编程实现方式介绍. 学习本课程,建 ...

  3. Python GUI编程:将自己写的postman打包成exe可执行文件

    通过前面几个章节的文章,我们学会了通过PySide2去编写一个简单的GUI页面测试小工具: Python GUI编程:PySide2介绍 Python GUI编程:如何运行第一个PySide2的窗体程 ...

  4. Python GUI编程-了解相关技术[整理]

    Python GUI编程-了解相关技术[整理] 我们可以看到,其实python进行GUI开发并没有自身的相关库,而是借用第三方库进行开发.tkinter是tcl/tk相关,pyGTK是Gtk相关,wx ...

  5. python快乐编程—基础入门-从萌新到大神必读书籍 《Python快乐编程基础入门》...

    2019年,全球信息化进程持续加快,IT行业繁荣发展.作为新时代IT人,不仅需要强大的理论知识,更需要过硬的技术.Python作为最受欢迎的编程语言之一,作为人工智能时代的首选语言,因其受众多.用途广 ...

  6. 自学python需要买书吗-学习python需要有编程基础吗

    编程零基础,可以学习 Python 吗",这是很多初学者经常问我的一个问题.当然,在计算机方面的基础越好,对学习任何一门新的编程语言越有利.但如果你在编程语言的学习上属于零基础,也不用担心, ...

  7. python编程基础是什么-Python面向对象编程基础解析(一)

    1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向 ...

  8. Python gui编程pyQt5安装步骤

    Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic  $FileName$ -o $FileNameWit ...

  9. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

最新文章

  1. c# 通过字体对话框获取字体名称和字体大小_【插件】PS、AI、ID都能用的字体管理插件...
  2. GDCM:处理JAI-JPEGLS错误的测试程序
  3. 用互联网思维做产品的7个要…
  4. 千分之三用计算机怎么算,浓度换算计算器(浓度单位换算器在线使用)
  5. C语言按下列公式计算 求A20的值,2011年全国计算机二级C语言模拟试题及答案(10)...
  6. 网页缩放与窗口缩放_功能缩放—不同的Scikit-Learn缩放器的效果:深入研究
  7. mysql 加载数据校验_mysql 导入数据后的校验程序
  8. 复述-软考网规--云计算专题
  9. 数据结构2 - 线性表
  10. e会学中C语言课程考试答案,管理信息系统期末考试A试卷答案卷
  11. 网络中各层协议(7层)
  12. Package php5 have no installation candidate。
  13. 方正平台(企业级应用的开发平台)
  14. WinPE的制作 - 进WinPE后自动运行程序
  15. JAVA定义一个树形的结构_Java自定义树形结构
  16. 谷歌浏览器开发工具调试样式
  17. html打印图片不显示不全,Word里图片显示全打印不全是怎么回事
  18. LeetCode打卡:870.优势洗牌
  19. 信息系统项目管理师考试如何备考
  20. 详解:熊掌号每一篇闪光的原创,都值得保护!

热门文章

  1. 开通【机器人功能】如何正确配置开启?
  2. C#制作视频播放器(Windows Media Player方法)
  3. Win7下双击U盘,”找不到应用程序”的原因与解决办法
  4. dubbo telnet
  5. Swift Swizzled
  6. 教你如何利用灰度图透明效果制作隐藏图片.part1
  7. Spring Boot 2.0系列文章(四):Spring Boot 2.0 源码阅读环境搭建
  8. 电脑用linux命令大全,Linux常用命令大全整理分享|Linux详细命令
  9. partition by的用法
  10. ubuntu16.04安装英伟达显卡驱动【亲测一下午】