在这里,我将根据自己的学习历程从初级到高级介绍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基本功能和操作入门的更多相关文章

  1. 关于 HSSF 和 XSSF 功能的开发者入门指南 (Apache POI 操作 Excel)

    关于 HSSF 和 XSSF 功能的开发者入门指南 笔者深夜无眠,特此对本文翻译一部分,未完成部分待后续更新 本文源文地址 意欲使用 HSSF 和 XSSF 功能快熟读写电子表格?那本文就是为你而写的 ...

  2. C语言与数据库操作入门

    https://blog.csdn.net/flyingqd/article/details/78763652 C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1 ...

  3. C语言与数据库操作入门(Win版)

    C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...

  4. Android二维码功能实现,在程序内嵌入ZXing项目

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码. ...

  5. SNF开发平台WinForm-平板拍照及扫描二维码功能

    在我们做项目的时候,经常会有移动平板处理检验,审核等,方便移动办公.这时就需要在现场拍照上传问题,把当场问题进行上传,也有已经拍完照的图片或加工过的图片进行上传.还有在车间现场一体机,工控机 这种产物 ...

  6. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  7. Storm实时计算:流操作入门编程实践

    转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践   Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比 ...

  8. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  9. (转载)Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow

    Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow   这是一张QQ空间说说详情的截图. 分析: 1.点击右上角三个点的图标,在界面底部弹出一个区域,这个 ...

随机推荐

  1. python-day7-静态方法、类方法、属性方法、特殊成员方法、反射、异常处理、socket

    @特殊方法.异常处理.反射.socket @类 属性 实例变量 类变量 私有属性__var 方法 构造方法, 析构函数(python自带,不写也有,写了相当与重构) 私有方法 继承 继承 组合 @7. ...

  2. SpringMVC参数注解解释

    在Controller的开发中,经常会用到很多注解,下面解释一下关于形参常用注解的一些解释,他们主要是用来接收参数的. @ModelAttribute("vo", ObjectVo ...

  3. easyUI 学习

    )省份-城市-区域三级联动[struts2 + ajax +非数据库版] (1)省份-城市-区域,基于jQuery的AJAX三级联动,用Struts2整合AJAX[非数据库版] $.ajax( { t ...

  4. vmware 进入虚拟机VMware的系统后鼠标不能点

    vmware 进入虚拟机VMware的系统后鼠标不能点 1)关闭虚拟机,重启win10,再打开虚拟机好了 2)

  5. Java学习随笔(2)--爬虫--天气预报

    public class Spiderweather { public static void main(String[] args) { List<String> list = null ...

  6. HTML - label (转)

    自:http://www.runoob.com 标签定义及使用说明 <label> 标签为 input 元素定义标注(标记). label 元素不会向用户呈现任何特殊效果.不过,它为鼠标用 ...

  7. Python re.findall函数不能匹配但是notepad++能匹配

    我使用同样的表达式匹配同样的网页源码,在notepad++里面不能直接使用,需要将内容都弄到同一行中. 但是我使用 requests.get(self.url).content.decode('UTF ...

  8. Mysql千万级大表优化

    Mysql的单张表的最大数据存储量尚没有定论,一般情况下mysql单表记录超过千万以后性能会变得很差.因此,总结一些相关的Mysql千万级大表的优化策略. 1.优化sql以及索引 1.1优化sql 1 ...

  9. 使用dubbo中间件的zookeeper注册中心时报错

    在项目中搭建soa项目时,使用dubbo服务中间件时需要在虚拟机中创建一个zookeeper注册中心,在配置都没有问题的时候,如果服务端启动成功,但是消费端启动报错并且看不出据地位置时,一定要注意你的 ...

  10. 从servlet规范说起

    servlet规范 1 servlet 3.1规范 1.1 What is servlet A servlet is a JavaTM technology-based Web component, ...