我们在第〇篇里先演示了GUI的功能,其实Python有多个库是支持GUI编程的,python官网列出了大量的说明,其中包括了原生的tkinter

还有许多第三方库

Pyqt

PySide

wxPython

PyGUI

Kivy.....等等

选库标准

首先,我们要明白,对任意一个库来说,都是没有最好的,只由最合适的,所以我们要结合这几点来来选择最适合自己的库:

1.简单好用

2.功能强大

3文档齐全,方便查询

4.性能强劲

5.稳定性高

6.生态支持

7.跨平台支持

8.开源免费.

除了上述的几点外,还有两点非常重要

可以看看软件版本和最近的更新时间,尽可能避开最小的版本号的和很久没有更新的,因为版本号太小是刚出的,有可能很多BUG都没有暴露出来,而太久没有更新的已经没有技术支持了,在大型的项目里一旦出了问题太难维护。

基于以上标准对比,我选择了PyQt5。

什么是PyQt?

PyQt本质上还是Qt,是一个用C++写的一个跨平台的GUI开发框架。而PyQt是Qt用Python进行了绑定,在保留原有的API时实现了原有的所有功能。所以一旦掌握了PyQt后再掌握了C++的基本语法可快速接受Qt的使用。

而现在使用的PyQt5,是Python对Qt5.x版本的绑定,完美的支持了Python3.x。

GUI编程要学习什么?

1.各种控件的特性和使用 

2.控件的样式

3.资源的加载

4.控件的布局

5.事件和信号

6.动画特效

7.界面跳转

8.设计工具的使用

9.额外的东西

我们把设计工具放在最后,就是在学会代码的时候利用QtDesigner之类的工具优化我们的编程流程,就是为了防止我们先会用设计工具忽略代码的方法。

PyQt5库结构

QtWidgets包含了一整套UI元素,用于建立符合系统风格的界面

QtGui 涵盖了多种基本图形功能的类:字体、图形、图标、颜色等

QtCore 涵盖了包的核心非GUI功能:时间、文件、目录、数据类型、文本流、连接、线程进程等

这三个是最长用的类,后面的我们以后有时间再讲

还有一个模块:Qt,是把所有的类综合到一个模块里。好处就是不用关心哪个模块里有哪些类,但是由于加载了所有的类,比较吃内存,适合新手学习时候使用。

下面用一个最简单的代码分析一下PyQt5程序基本结构

from PyQt5.Qt import *
import sys
app= QApplication(sys.argv) window = QWidget()
window.setWindowTitle('first GUI')
window.resize(500,500)#窗口大小
window.move(0,0)#窗口位置 lable = QLabel(window)
lable.setText('Hello World!')
lable.move(200,200) window.show()
sys.exit(app.exec_())

First_GUI

from PyQt5.Qt import *
import sys #导入模块
app = QApplication(sys.argv)#创建应用程序
window = QWidget() window.show()#控件操作 sys.exit(app.exec_())#开始执行应用程序并进入消息循环(无限循环)

注意通过app.exec_(),启动了一个无限循环,在这个循环里不断监听和用户的交互信息。

在控件操作的时候,常规方式就是先建立一个界面的父控件,再针对这个父控件建立按钮、标签等控件,完成后调用父控件的显示功能。

GUI学习之一——PyQt5初识的更多相关文章

  1. Java GUI学习笔记之初识AWT和Swing

    Frame f = new Frame(); //获取显示器的尺寸 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize() ...

  2. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  3. Java学习-027-JSON 之一 -- 初识

    通常,我们在生活中使用的应用产品(无论是 Web应用还是 App 应用),又或者我们平常的信息交流,均无可避免的存在着信息交互,在信息交互的过程中就有着信息载体的存在.那么,在我们熟知的网络应用产品中 ...

  4. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  5. Storm学习笔记 - Storm初识

    Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...

  6. [学习一个] Matlab GUI 学习笔记 Ⅰ

    Matlab GUI 学习笔记 Ⅰ 1. Foreword Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强 ...

  7. [转]git学习------>git-rev-parse命令初识

    git学习------>git-rev-parse命令初识 2017年06月13日 10:04:13 阅读数:2172 一.准备工作 第一步:在d盘git test目录下,新建工作区根目录dem ...

  8. Spring 学习记录8 初识XmlWebApplicationContext(2)

    主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...

  9. LevelDB学习笔记 (1):初识LevelDB

    LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...

随机推荐

  1. [蓝桥杯]PREV-8.历届试题_买不到的数目

    问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 颗糖. 你可以 ...

  2. linux git pull/push时提示输入账号密码之免除设置

    1.先cd到根目录,执行git config --global credential.helper store命令 [root@iZ25mi9h7ayZ ~]# git config --global ...

  3. Prometheus介绍

    Prometheus的主要特点 Prometheus 属于一站式监控告警平台,依赖少,功能齐全.Prometheus 支持对云的或容器的监控,其他系统主要对主机监控.Prometheus 数据查询语句 ...

  4. Java 身份证判断性别获取年龄

    import com.alibaba.fastjson.JSON; import org.junit.Test; import java.text.SimpleDateFormat; import j ...

  5. IDEA run下output标签悬浮/弹出状态

    就是这样,在哪儿有一个恢复布局标签

  6. Echarts报错 Can't read property 'getWidth' of null

    统计图报错: 这里的报错与echarts无关,与zrender有关,zrender是echarts依赖的canvas绘图库 你不需要了解zrender,这个问题是你代码出了错 谨记::代码的错

  7. playbook

    1 --- - hosts: web-server 3 remote_user: root tasks: - name: stop logstash shell: PID=` $PID &&a ...

  8. tensorflow 1.9 ,bazel 0.15.0,源码编ERROR, Skipping, '//tensorflow/tools/pip_package:build_pip_package',error loading packageCuda Configuration Error, Cannot find libdevice.10.bc under /usr/local/cuda-8.0

    最近在看tensorflow 移动端部署,需要编译源码才支持,所以又拾起来了编译这项老工作,其中遇到问题: bazel build --cxxopt="-D_GLIBCXX_USE_CXX1 ...

  9. 商品批量删除(mybatis中集合的使用)

    <!-- 根据主键批量删除 --> <delete id="deleteByKeys"> DELETE FROM product WHERE id in & ...

  10. 九、Brideg 桥接模式

    设计原理: 代码清单: 抽象类 DisplayImpl public abstract class DisplayImpl { public abstract void rawOpen(); publ ...