我们先看下面一个简单的GUI代码:

from PyQt5.QtWidgets import QApplication, QLabel

app = QApplication([])

label = QLabel('Hello World!')

label.show()

app.exec_()

第一行是导入相关的QT相关的库。

接着第二行是通过创建了一个QApplication:

app = QApplication([])

这是必须要创建的一个对象。每个GUI程序都必须有且只有一个QApplication的实例。如果没有这个实例的话,我们写的QT是没法执行的,所以我们写QT代码的时候一定不要忘了创建这个对象。 创建这个对象时需要传递一个list参数,因为我们的GUI不需要什么参数,所以直接传递了一个[]。

在创建了app之后,我们又创建了一个Label(标签):

label = QLabel('Hello World!')

传递的参数就是标签显示的内容,然后通过调用show()方法让它在屏幕上显示。

最后的一行代码是告诉qt一直运行下去,直到有人关闭它。

完成上述工作之后,执行代码,我们的一个小小窗口就会显示在屏幕上:

QVBoxLayout example

Widgets

我们在Qt程序中看到的每个东西都可以称之为一个widget:按钮,标签,窗口,对话框,程序的进度条等等。与HTML元素类似,widget一般也都是嵌入式的。举个例子,一个窗口包含了一个按钮,同时也可能包含了一个标签。

下面的截图展示了QT中常用的widget。

Screenshot of common Qt widgets using the Fusion style

从上到下,从左到右,这些widget依次是:

Layouts

正如上面的截图所示,我们的GUI中可能包含了多个widgets。在这种情况下,我们需要告诉QT如何安放这些widgets。例如。我们可以使用QVBoxLayout垂直堆放widget:

QVBoxLayout example

这个截图的代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout

app = QApplication([])

window = QWidget()

layout = QVBoxLayout()

layout.addWidget(QPushButton('Top'))

layout.addWidget(QPushButton('Bottom'))

window.setLayout(layout)

window.show()

app.exec_()

一如既往,我们还是先创建了一个QApplication。接着我们创建了一个window。我们使用的是最基本的QWdiget,因为它只是一个容器,用来放置widget,我们并不需要它有什么特殊的功能。然后,我们就创建了一个layout,还创建了两个QPushButton放在里面。最后,我们告诉了window,我们需要使用这个layout。然后就跟我们的第一个GUI一样,调用show()和exec_()。

当然还有很多其他的layout,例如QHBoxLayOut等等。更多的风格,可以在qt的网站上查阅

自定义风格

QT一个比较强大的地方就是它支持自定义的用户风格。

风格设置

比较直接的设置方式就是在我们的程序中直接指定全局的风格。我们再看看之前的截图:

Screenshot of common Qt widgets using the Fusion style

上面的这个窗口风格称之为Flusion,我们也可以把他替换成Windows风格:

Screenshot of common Qt widgets using the Windows style

通过qpp.setStyle(...)方法,我们就可以设置自己的风格了。

from PyQt5.QtWidgets import *

app = QApplication([])

app.setStyle('Fusion')

...

具体支持什么样的风格依赖于我们使用的操作系统,但是一般都支持以下的风格:'Fusion', 'Windows', 'WindowsVista'(仅Windows支持) and 'Macintosh' (仅Mac支持)

自定义颜色

如果我们喜欢一种风格,但是我们想改变一些颜色。那么我们就可以使用QPalette来实现我们的功能。例如:

from PyQt5.QtCore import Qt

from PyQt5.QtGui import QPalette

from PyQt5.QtWidgets import QApplication, QPushButton

app = QApplication([])

app.setStyle('Fusion')

palette = QPalette()

palette.setColor(QPalette.ButtonText, Qt.red)

app.setPalette(palette)

button = QPushButton('Hello World')

button.show()

app.exec_()

执行效果如下:

Screenshot of a QPushButton with red text in the Fusion style

面板风格

除了上述的功能之外,我们还可以通过面板风格来改变我们程序的外观。这就是QT类似于CSS的特性。我们可以通过以下的方法我们的面板添加一些空间:

from PyQt5.QtWidgets import QApplication, QPushButton

app = QApplication([])

app.setStyleSheet("QPushButton { margin: 10ex; }")

button = QPushButton('Hello World')

button.show()

app.exec_()

Qt window with a button surrounded by extra space

更多关于面板风格的信息,可以查看qt官网。

Signals / slots

QT 通过Signals(信号)机制来让我们对一些事件做响应,例如我们点击了一个按钮。下面的这个例子就是当我们点击按钮时,会弹出对话框。

from PyQt5.QtWidgets import *

app = QApplication([])

button = QPushButton('Click')

def on_button_clicked():

alert = QMessageBox()

alert.setText('You clicked the button!')

alert.exec_()

button.clicked.connect(on_button_clicked)

button.show()

app.exec_()

PyQt QMessageBox saying that a button was clicked

button.clicked这就是个signal(信号),.connect(...)就是我们指定的与这个signal关联的slot(槽)。上面这是一个简单的响应函数,当我们点击这个按钮的时候,这个动作(函数)就会触发。

Signals在QT中是无处不在的,用户也可以定义自己的signal。

编译属于自己的APP

现在我们已经有了一点关于GUI的基本知识了。但是当我们写好一个程序之后,如何给别人使用呢?让别人搭建环境,然后再把脚本给人家吗?这肯定是不合理的,所以我们该怎么做呢?

在python的世界中,将源码转换成一个可执行的包,这种操作称之为freezing。尽管现在已经有很多的库都可以解决这个问题,例如:PyInstaller ,py2exe,cx_Freeze,bbfreze,py2app...但是这些传统的库用来freezing一个PyQt程序还是有点难度的。

这里我们使用一个全新的fbs库,它可以让我们轻易的将python源码转换成一个执行的PyQt程序。安装fbs也很简单,执行下面的命令就OK了:

pip install fbs

接着执行:

fbs startproject

然后你就会看到下面的提示:

Commands for starting a new project with fbs

当你输入run之后,就会打开一个空的窗口:

An empty window showing 'Hello World!' in its title

这就跟我们之前创建的一个qt程序相似。它会在我们的当前目录下创建一个文件src/main/python/main.py,然后我们可以试着把它编程一个可执行的文件。

fbs freeze

这个命令就在你当前的目录的target/MyApp/子目录有了一个可执行的文件。然后我们就可以把它发送给别人了。

(注意:fbs现在支持Python 3.5 或者 3.6,如果你的版本不是二者之一,同时你的fbs还出现了问题,建议你安装Python 3.6再试试。)

小奖励![img]:创建一个安装包

通过fbs installer命令我们还可以创建安装包。

img

img

(如果你使用的Windows系统,那么你需要先安装NSIS,然后配置好环境变量)

线面的一篇文章说明了如何使用fbs,另外你也可以看看fbs教程

python qt快速入门_Python QT5 简洁入门相关推荐

  1. python代码性能分析_Python 性能分析入门指南

    虽然并非你编写的每个 Python 程序都要求一个严格的性能分析,但是让人放心的是,当问题发生的时候,Python 生态圈有各种各样的工具可以处理这类问题. 分析程序的性能可以归结为回答四个基本问题: ...

  2. python qt快速入门_PyQt5快速入门(一)

    PyQt5快速入门(一) 前言 为什么选择PyQt5作为GUI框架? API与Qt一致, 学会PyQt后再使用qt很简单 开发迅速, 可视化操作,使用designer快速拖拽布局进行调试 可以将文件打 ...

  3. python怎样算入门_python初学者怎么入门

    据百度大数据统计每月有4260705的用户在百度检索Python相关介绍,在大众周围,也总是充斥着各种如何学习Python的声音,许多人已经对于是否"应该学习Python"也都发表 ...

  4. python怎么输出浮点数_python 零基础入门教程第 2 章:基本数据类型 (一)

    一.什么是数据类型 编程语言通过一些复杂的计算机物理底层机制,创造不同类型的数据,用来表示现实世界中的不同信息,以便于计算机更好的存储和计算. 每种编程语言都会有一些基本的数据类型用来表示现实世界中的 ...

  5. python做动画视频教程_Python零基础入门动画教程

    课程答疑: QQ群:913293727 适用人群 在校大学生/应届毕业生/业余编程爱好者/初.中开发学习者/大中专院校师生/数据分析人员/技术支持/测试人员 课程概述--课程大纲-- 1.Python ...

  6. python scrapy 简单教程_python之scrapy入门教程

    看这篇文章的人,我假设你们都已经学会了python(派森),然后下面的知识都是python的扩展(框架). 在这篇入门教程中,我们假定你已经安装了Scrapy.如果你还没有安装,那么请参考安装指南. ...

  7. python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程

    教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...

  8. python sub 不区分大小写_Python网络爬虫入门篇

    1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. Python入门篇:https://www.cnblo ...

  9. python 类和对象_Python零基础入门学习33:类与面向对象编程:类的继承

    注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. 本文字数约1300,阅读时间约为3分钟. Python面向对象编程 类的继承机制 如果一个类A继承自另一个类B,就把继承者类A称 ...

  10. python初学者怎么学习_Python初学者怎么入门 Python的学习方法有什么?

    Python非常适合那些没有任何基础的同学.在入门阶段,可以自己看一些Python相关的书,或者看视频教程,这是初学者有效的学习方法,再结合实操,就能入门了.Python没有指针变量类型这样的复杂概念 ...

最新文章

  1. 如何创建systemd定时任务
  2. 2020未来科学大奖获奖名单揭晓
  3. 『ExtJS』01 009. ExtJS 4 方法重载
  4. oracle密码加密工具下载,oracle加密工具wrap
  5. 【百度联盟峰会】李彦宏详解AI时代思维方式,算法驱动的降维攻击
  6. gradle编译打包过程 之 ProcessAndroidResources的源码分析
  7. 先来先服务算法代码_一致性哈希算法编写
  8. Angular元素属性绑定的一个例子
  9. net start mysql 发生系统错误 5。 拒绝访问。的解决方法
  10. 共阳数码管段码表_简单共阴极数码管电路图大全
  11. Android自带语音播报TextToSpeech功能开发记录
  12. 用keras对国产剧评论文本的情感进行预测
  13. 倡导国稻种芯·中国水稻节 万祥军:农民丰收节金秋消费季
  14. 华为内部访谈:凡是溜须拍马的员工,一律拿掉
  15. LTE PDCP层协议概述
  16. java ireport生成pdf_jasperreport 生成pdf实现下载与打印
  17. 爱马仕橙JOYEAS休闲沙发
  18. R语言 读写带分隔符的文件
  19. ubuntu12.04 飞鸽传书安装
  20. 传奇一键端服务器维护,烈焰炫彩传奇最终版一键服务端+启动教程+GM工具

热门文章

  1. Java中构造方法被别封装后的调用
  2. 服务器控件与Html控件属性值的解释差异
  3. python中出现nameerror_python类中出现NameError的问题
  4. mysql undo损坏_当数据库没有备份,redo或undo损坏
  5. Python多进程之Pool
  6. python 里面的内置函数之:locals() 和 globals()
  7. DPDK-VPP 学习笔记-02
  8. MFC动态链接库和WIN32动态链接库 及区别
  9. 学生成绩管理系统源码
  10. bigemap地图下载器优势分析