二、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.点击右上角三个点的图标,在界面底部弹出一个区域,这个 ...
随机推荐
- Django09-中间件
一.前戏 之前通过给视图函数加装饰器来判断用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰器,这样稍微有点繁 ...
- Java解法-两数相加(Add Two Numbers)
问题 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...
- python视频学习笔记3(循环)
一.程序的三大流程 二.while 初始条件设置 —— 通常是重复执行的 计数器 while 条件(判断 计数器 是否达到 目标次数): 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做 ...
- jmeter安装和使用-个人总结
幼儿园版本服务器接口地址:http://10.50.10.78:8666/document/api/#api-account-login 一,安装 1.将jmeter下载后,解压目录放到本地非中文文件 ...
- 移动端ios下H5的:active样式失效的解决方法
在body上绑定一个touchstart事件,空函数就行: document.body.addEventListener('touchstart', function(){}, false) 或者在b ...
- cent os安装filebeat
先贴一下官方文档https://www.elastic.co/guide/en/beats/filebeat/6.6/filebeat-installation.html 我本次使用rpm的方式安装, ...
- 如何使用tensorboard查看tensorflow graph****.pb文件的模型结构
参考网上的:https://github.com/tensorflow/tensorflow/issues/8854 import tensorflow as tf from tensorflow.p ...
- JQ滚动条监听事件
版权归作者所有,任何形式转载请联系作者.作者:帅阿猪(来自豆瓣)来源:https://www.douban.com/note/637256366/ 先来一个小例子: $(document).ready ...
- EOSIO/appbase
[EOSIO/appbase] AppBase是EOSIO开源一个plugins架构程序框架,被应用于 EOS nodeos中.AppBase manages the plugin life-cycl ...
- 每日笔记-redis的理解及相关应用
原文链接:常见面试题 本文大纲与之类似,在其基础上加入了自己在实际项目中对部分知识点的理解 Q1:谈谈对redis的理解 Q2:谈谈实际应用中怎么用redis的 2.1 缓存 2.2 分布式锁 2.3 ...