我们在第〇篇里先演示了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. Unix/Linux进程间通信

    一,Linux下进程间通信的几种主要手段简介: 1,管道(Pipe)及有名管道(named pipe) 管道可用于具有亲缘关系进程间的通信 有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功 ...

  2. 基础:位(bit)、字节(byte)、字符、编码之间的关系

    1.位: 数据存储的最小单位.每个二进制数字0或者1就是1个位: 2.字节: 8个位构成一个字节:即:1 byte (字节)= 8 bit(位): 1 KB = 1024 B(字节): 1 MB = ...

  3. 对中断interrupt的理解

    一.中断 线程的几种状态:新建.就绪.运行.阻塞.死亡.参考:线程的几种状态转换 线程的可运行状态并不代表线程一定在运行(runnable != running ) . 大家都知道:所有现代桌面和服务 ...

  4. CentOS 7安装php

    我们已经在上一篇里安装上了nginx:现在我们想要php(也许还包括mysql). (CentOS 7里使用mariadb替代了mysql) # yum install mariadb-client ...

  5. Tomcat整体架构分析

    下面让我们来看看Tomcat容器的整体结构: 本文的目的是覆盖这张图中所涉及的主要请求处理组件.而上图中的一些高级主题如集群和安全则不是在本文讨论的范围之内. 本图中,Service, Host, C ...

  6. redis5.0.4 集群搭建

    准备工作用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-5.0.4 版本. 两台虚拟机都是 CentOS ,一台 CentOS ...

  7. ssl协议相关

    <1> SSL版本 测试浏览器支持的SSL版本的网站: https://www.ssllabs.com/ssltest/viewMyClient.html 0xfefd    (DTLS ...

  8. 关于报错:There is already 'xxxController' bean method的解决方法

    报这个错的原因是因为你controller里的@RequestMapping中的路径有重复! 如:

  9. JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    JVM区域总体分两类,heap区和非heap区.heap区又分为: Eden Space(伊甸园). Survivor Space(幸存者区). Old Gen(老年代). 非heap区又分: Cod ...

  10. 系统计划 Cron作业 为什么/etc/crontab /etc/cron.d /etc/cron.* 那么多的定义方式????

    当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab.但是,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的.例如,增加一项定时的备份任务,我们可以这样处 ...