来源
http://www.python3.vip/tut/py/gui/qt_02/
从一个案例开始
现在,我们要开发一个程序,这个程序很简单:让用户输入一段文本包含:员工姓名、薪资、年龄
格式如下:
员工姓名 薪资 年龄
薛蟠 4560 25
薛蝌 4460 25
薛宝钗 35776 23
薛宝琴 14346 18
王夫人 43360 45
王熙凤 24460 25
王子腾 55660 45
王仁 15034 65
尤二姐 5324 24
贾芹 5663 25
贾兰 13443 35
贾芸 4522 25
尤三姐 5905 22
贾珍 54603 35
我们的程序的作用: 当用户输入这些信息之后,我们的程序需要把薪资在 2万 以上、以下的人员名单分别打印出来。
分析
第一种方法
当然我们可以像以前一样,开发命令行程序(准确的说应该叫字符终端程序,因为UI是字符终端),让用户在字符终端输入。
第二种方法
但是如果我们能开发下面这样的图形界面程序,就更酷了
使用QT开发的可行性
是否可行?
能开发出这样的界面吗?
能
具体实现
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit
app = QApplication([])
window = QMainWindow()
window.resize(500, 400)
window.move(300, 310)
window.setWindowTitle('薪资统计')
textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)
button = QPushButton('统计', window)
button.move(380,80)
window.show()
app.exec_()
运行程序
现在,代码已经全部输入了
【Ctrl】+【shift】+【F10】,运行这个py文件
然后就出现了这个界面
当然,这个程序的功能还没有来得及实现,不过界面已经创建完毕了!
代码详细的分析
代码分析
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit
# QtWidgets是PySide2中一部分的内容,它专门负责带有控件的窗口
# QApplication:应用程序
# QMainWindow:主窗口
# QPushButton:按钮
# QPlainTextEdit:纯文本的编辑框
app = QApplication([]) # 实例化一个对象
# QApplication提供了整个图形界面程序的底层管理功能
# 比如:初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,等等…
# 初始化:为了图形用户界面,它需要初始一些资源,操作系统要申请一些资源的处理
# 用户事件:用户对界面的点击、输入、拖拽,这些都是属于用户事件,它需要把这些事件分发给各个控件
# 比如说你在哪个区域点击的,这个区域属于哪个控件管理
"""因为QApplication需要做这么多重要的操作,所以我们必须在任何界面控件对象创建前,先创建它。
至于这里面的参数,我们可以先填一个空值"""
"""主窗口对象"""
window = QMainWindow()
# 创建一个主窗口对象
# 注意:直到目前为止的创建都还没有显示在界面上,只是我们先把即将要显示在界面上的主窗口先申请一下,先定义一下它的外观和其他的几个属性,但是代码执行到现在为止,还没有生成这个主窗口对象显示在界面上
window.resize(800, 600)
# 决定了这个主窗口对象的大小
# (宽度,高度)单位:px,例如:(500,400)表示:宽度:500px,高度:400px
window.move(1000, 110)
# 控制这个主窗口待会在显示的时候会出现在用户的显示器的什么位置
# 具体算法是程序的左上角和显示器的左上角的相对位置
# (在x轴上的距离,在y轴上的距离)单位:px
window.setWindowTitle('薪资统计')
# window.setWindowTitle(string)表示:将string中的内容设置在程序的标题栏上
"""纯文本输入的控件"""
textEdit = QPlainTextEdit(window)
# 实例化一个对象
# QPlainTextEdit:纯文本的控件
# 参数:window 表示指定我们当前控件的副窗口是window,也就是在副窗口上创建这个控件
# 简单说就是在主窗口对象上创建一个纯文本输入的区域
textEdit.setPlaceholderText("请输入薪资表")
# 这个控件的方法叫做:setPlaceholderText
# setPlaceholderText(string):就是在这个纯文本输入的控件中我们预先定义好的具有提示性语言的文本,其中string为提示性文本的内容
# 这块区域中没有输入内容:显示提示性文本
# 这块区域中我们输入了内容:显示我们输入的内容,提示性文本自动消失
textEdit.move(30,50)
# 设置这块区域在整个主窗口对象中的位置
# 如果说一个控件存在着副窗口,那么这个命令就表示这块区域的左上角和这个副窗口区域的左上角的相对位置
# 因为现在这个控件的副窗口就是我们的主窗口对象
# 所以这段代码在这里表示:这块区域的左上角和整个主窗口左上角的相对位置,其中要注意:这里的主窗口不包括标题栏
textEdit.resize(300,350)
# 指定这个控件区域的大小
# (宽度,高度)单位:px
"""按钮控件"""
button = QPushButton('统计', window)
# 实例化一个按钮对象
# button = QPushButton(按钮上显示什么文本,设置这个控件的副窗口(也就是在这个副窗口区域上创建这个按钮控件))
# 表示:在主窗口对象上创建一个按钮,这个按钮上显示着“统计”这段内容
button.move(380,80)
# 在这里表示这个按钮区域的左上角和整个主窗口的左上角的相对位置
# 因为这个按钮区域的副窗口是整个主窗口
window.show()
# 表示将window展示在界面上
# 注意:到这里程序还没有结束,因为如果没有下一行代码,那这个程序执行到这里就一闪而过就没了
app.exec_()
# 表示:进入了事件处理循环
# 也就是说我们当前的这个带有界面的程序执行到现在的这行代码的时候就说明这个程序一直在循环,等待用户对于这个界面的操作(这其实就是事件),然后它会对用户的事件作出反应
# 注意:这是一个死循环,只要我们不是人为地关闭这个窗口,它是永远也不会退出的
# 注意:这段代码很重要,如果没有这段代码,那么我们的程序一跑到这里就会自动结束,这句才是真正的消息的处理
其中
程序的左上角和显示器的左上角的相对位置
程序的标题栏
纯文本输入的控件
小结
1.导入相关的模块
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit
2.实例化一个对象
app = QApplication([]) # 实例化一个对象
3.创建一个主窗口对象,也就是最下层的图层
window = QMainWindow()
4.设置这个创建的主窗口对象的一些属性
window.resize(500, 400)
window.move(300, 310)
window.setWindowTitle('薪资统计')
5.以我们的主窗口对象为最底层的图层,在这个图层之上新建一些控件
textEdit = QPlainTextEdit(window)
button = QPushButton('统计', window)
6.设置这些控件的属性
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)
button.move(380,80)
7.使我们的这个程序在界面上显示出来,一般选择最底层的图层显示
window.show()
8.进入事件循环,用户可以触发事件,然后程序可以对用户的事件作出反应
app.exec_()