二、PyQt5基本功能和操作入门
在这里,我将根据自己的学习历程从初级到高级介绍pyqt5。因为是学到哪里就写道哪里,所以内容排版比较随意。有两点问题需要先说明:
1.虽然界面的设计可以借助qt designer进行拖拽创建,并且可以大大简化操作,提高效率。但个人感觉对于初学者来说,先理解pyqt5的各函数和方法,对加深理解大有帮助。
2.pyqt5的使用应该坚持界面于逻辑分离的原则。本节因为是基础介绍,暂未将界面于逻辑分离,后续内容会涉及。
一、基本窗口
在这里,我们先通过一个小例子对pyqt5有意个初步的认知。
import sys,time
from PyQt5.QtWidgets import QApplication,QWidget
#这里导入了PyQt5.QtWidgets模块,里面包含了基本的组件 if __name__=="__main__":
app = QApplication(sys.argv)
win = QWidget()
win.resize(500,400) #窗口宽500px,高400px
#win.show()
#time.sleep(3)
win.move(500,500) #将窗口移动到屏幕上(500,500)处
win.setWindowTitle("hello world")
win.show()
pyqt5小例子
注:
- 退出时app.exec_() 之所以在exec后加了一个下划线,是因为exec时pyth的关键字。
- 这个例子中引入了time模块是为了体现出窗口位置的变化过程(已注释掉)。
通过上面这个小例子,我们已经了解了pyqt5的基本功能,了解设置窗口大小,位置以及标题和窗口显示的基本操作。
显示效果如下
二、添加小控件
上一节的内容只是单个基础窗口的显示,我们还可以为窗口设置一些具有特殊功能的按键(pushbutton),并设置提示信息,提高操作友好度。下面是第二个小例子。
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication class Win_Example(QWidget): def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setGeometry(300,300,300,300)
self.setWindowTitle('第二个小例子')
self.setWindowIcon(QIcon('chuan.ico')) #设置窗口图标,即窗体左上角的图标,注意路径问题 pushbtn =QPushButton('退出',self)
pushbtn.resize(pushbtn.sizeHint()) #resize是设置按钮的大小,sizehint为默认大小
pushbtn.move(80,80) #设置按钮的坐标为(80,80)
pushbtn.clicked.connect(QCoreApplication.instance().quit) #连接事件和信号 '''设置提示信息的格式,内容'''
QToolTip.setFont(QFont('楷体', 15))
# self.setToolTip('这是提示信息')
self.setToolTip('这是<b>加粗的提示信息<b>') #两个<b>之间的文字会加粗显示
pushbtn.setToolTip('这是个按钮') if __name__ == "__main__":
app = QApplication(sys.argv)
win = Win_Example()
win.show()
sys.exit(app.exec_())
pyqt5小例子
在上面的小例子中,我们加入了更多的命令,并采用了面向对象的方法来编程。
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication
- QPushButton是一个按键类,可以为窗口添加按键;
- QToolTip是提示类,可以设置提示信息;
- QIcon和QFont是用来设置图标和字体样式;
self.setWindowIcon(QIcon('chuan.ico'))
这里为窗口设置了图标,需要注意图标的路径问题。本例中,图标就在当前目录下。另外,图标图片为ico格式,最好选用32*32大小。当然,如果选择更大的图片,实际显示时会自动压缩。
pushbtn =QPushButton('退出',self)
pushbtn.resize(pushbtn.sizeHint())
pushbtn.move(80,80)
pushbtn.clicked.connect(QCoreApplication.instance().quit)
这里设置了按钮,并将pushbutton的单击事件与quit函数连接。这里涉及了信号和槽的概念,后续会专门学习,这里不做深入讨论。
resize()可以自定义窗口的大小。sizehint()窗体默认大小
QToolTip.setFont(QFont('楷体', 15))
self.setToolTip('这是<b>加粗的提示信息<b>')
pushbtn.setToolTip('这是个按钮')
这里为窗体和按键都设置了提示信息,请注意:<b>...<b> <i>...<i> <u>...<u>分别可以设置提示信息加粗、斜体、下划线。这三中显示方法可以单独使用,也可以组合使用。另外,尖括号中的b、i、u大小写均可。
显示效果如下:(因为qq截图的原因,图片上的鼠标箭头未能正确显示)
三、设置中心显示和对话框
我们平时在操作软件时,有时候为了防止错误操作,会增加一个交互界面确认操作,通识为了美观,通常希望窗口在屏幕中心显示。现在,我们就来学习这两个方法。在第二节的基础上,我们更新代码如下:
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip,QMessageBox,QDesktopWidget
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication class Win_Example(QWidget): def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setGeometry(300,300,300,300)
self.setWindowTitle('第二个小例子')
self.setWindowIcon(QIcon('chuan.ico')) #设置窗口图标,即窗体左上角的图标,注意路径问题
self.center_show() pushbtn =QPushButton('退出',self)
pushbtn.resize(pushbtn.sizeHint()) #resize是设置按钮的大小,sizehint为默认大小
pushbtn.move(80,80) #设置按钮的坐标为(80,80)
pushbtn.clicked.connect(QCoreApplication.instance().quit) #连接事件和信号 '''设置提示信息的格式,内容'''
QToolTip.setFont(QFont('楷体', 15))
# self.setToolTip('这是提示信息')
self.setToolTip('这是<b>加粗的提示信息<b>') #两个<b>之间的文字会加粗显示
pushbtn.setToolTip('<u>这是个按钮<u>') def closeEvent(self, QCloseEvent):
res = QMessageBox.question(self,'对话框','是否确认退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
if res == QMessageBox.Yes:
QCloseEvent.accept()
else:
QCloseEvent.ignore() def center_show(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft()) if __name__ == "__main__":
app = QApplication(sys.argv)
win = Win_Example()
win.show()
sys.exit(app.exec_())
pyqt5小例子
可以看到,首先我们有新引入了两个类QmessageBox和QDesktopWidget。前者关于提示信息的对话框,后者可以提供屏幕的有关信息。
显示效果如下:
下面,我们来分析代码
def closeEvent(self, QCloseEvent):
res = QMessageBox.question(self,'对话框','是否确认退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
if res == QMessageBox.Yes:
QCloseEvent.accept()
else:
QCloseEvent.ignore()
这个函数功能是用户在点击右上角按键退出时,弹出消息框确认是否真的要退出。有几个知识点需要说明下:
3.1 QMessageBox消息框的几种类型
- QMessageBox.information 信息框
- QMessageBox.question 问答框
- QMessageBox.warning 警告
- QMessageBox.ctitical危险
- QMessageBox.about 关于
可根据事件的严重级别选择合适的消息框,这一点类似logger。
3.2 注意QMessageBox.question()的格式
QMessageBox.question(self,'对话框','是否确认退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)意义是:消息框标题为“对话框“,消息框内容为“是否确认退出”,按键1为yes,按键2为no,默认按键为no。注意按键1和按键2中间一“|”分隔。
def center_show(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
设置窗口剧中的方法为通过self.frameGeometry()获得主窗口大小并传给对象qr,接着QDesktopWidget().availableGeometry().center()获取显示器分辨率并找到中心点位置,qr.moveCenter(cp)将主窗口中心移动到屏幕中心,self.move(qr.topLeft())窗口的左上角的坐标设置为qr的矩形左上角的坐标,这样就把窗口居中了。
当然,这不是唯一的方法,还可以采用如下方法:
def center(self):
screen = QDesktopWidget().screenGeometry() #用来计算显示屏幕大小,QDsktopWidget是描述显示屏幕的类
size = self.geometry() #获取窗口大小
self.move((screen.width() - size.width()) / 2,(screen.height() - size.height()) / 2)
以上两种方法都可以。
二、PyQt5基本功能和操作入门的更多相关文章
- 关于 HSSF 和 XSSF 功能的开发者入门指南 (Apache POI 操作 Excel)
关于 HSSF 和 XSSF 功能的开发者入门指南 笔者深夜无眠,特此对本文翻译一部分,未完成部分待后续更新 本文源文地址 意欲使用 HSSF 和 XSSF 功能快熟读写电子表格?那本文就是为你而写的 ...
- C语言与数据库操作入门
https://blog.csdn.net/flyingqd/article/details/78763652 C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1 ...
- C语言与数据库操作入门(Win版)
C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...
- Android二维码功能实现,在程序内嵌入ZXing项目
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码. ...
- SNF开发平台WinForm-平板拍照及扫描二维码功能
在我们做项目的时候,经常会有移动平板处理检验,审核等,方便移动办公.这时就需要在现场拍照上传问题,把当场问题进行上传,也有已经拍完照的图片或加工过的图片进行上传.还有在车间现场一体机,工控机 这种产物 ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- Storm实时计算:流操作入门编程实践
转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- (转载)Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow
Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow 这是一张QQ空间说说详情的截图. 分析: 1.点击右上角三个点的图标,在界面底部弹出一个区域,这个 ...
随机推荐
- EventEmitter:nodeJs事件触发机制
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列 Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.r ...
- python_12 模块
在python中,一个.py文件就称之为一个模块(module) 好处:提高代码的可维护性 模块分为三种:1.python标准库 2.第三方库 3.应用程序自定义模块 import的作用: ...
- python3 字典update与deepcopy
问题概述: 在码代码中,需要保存一个字典,用的update,后来发现update的值会随着原字典值得变化而变化. 而后使用deepcopy来保存字典. update a = {1:{2:3}}b= { ...
- 初探LaTeX
第一次使用LaTeX 步骤 1 安装LaTeX 通过官网http://www.tug.org/mactex/mactex-download.html下载Mac版LaTeX. 安装成功后会出现 步骤 ...
- Linux 下安装 apache
1.检查是否已经安装过 apache (linux 中 apache 的名字是 httpd) rpm -qa httpd 2.如果没有安装过,运行如下命令 yum install httpd -y ...
- 四百万条数据创建简单索引报错ora01652
经过几次度娘之后终于找到了解决方案,因为当时创建的indextest表是属于系统表空间,而系统表空间默认好像有大小限制,所以需要修改系统表空间的大小,至于修改表空间的语句可以随时度娘. 经过修改,创建 ...
- JS应用猜数游戏
(function(){ let rs = require("readline-sync"); let guessNumber = new Set(); function getN ...
- JS数组的基本操作方法
一.concat()concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2,3];var arr2 = [4,5];va ...
- 变量新声明之let、const
一.let 1.通过let声明变量不会变量声明提升 let a = 10; console.log( a ) 会报错 2. let a = 10; let a = 10; 会报错,(a 已被定义) 3 ...
- 区间求小于等于k的数字个数 hdu4177
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目意思给出一个序列,叫我们求一个区间里面小于等于k的数字个数. 这里面我用分块和主席树两种方法 ...