在这里,我将根据自己的学习历程从初级到高级介绍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. js生成uuid

    前端不能像java一样有内置的uuid生成包,所以需要自己写一个function,每次调用这个函数都会生成一个不同的字符串,代码如下: getuuid() { var uid = []; var he ...

  2. .Net导出pdf文件,C#实现pdf导出 转载 http://www.cnblogs.com/hmYao/p/5842958.html

    导出pdf文件. 在编码前需要在网上下载个itextsharp.dll,此程序集是必备的.楼主下载的是5.0版本,之前下了个5.4的似乎不好用. 下载之后直接添加引用. <%@ Page Lan ...

  3. 深入理解Java虚拟机读书笔记2----垃圾收集器与内存分配策略

    二 垃圾收集器与内存分配策略 1 JVM中哪些内存需要回收?     JVM垃圾回收主要关注的是Java堆和方法区这两个区域:而程序计数器.虚拟机栈.本地方法栈这3个区域随线程而生,随线程而灭,随着方 ...

  4. ajax请求中包含中文参数

    对需要传递的中文参数先进行两次转码: 1.js文件中使用encodeURI()方法. var url = "Validate.jsp?id=" + encodeURI(encode ...

  5. ArcGIS 批量修改数据名称-arcgis案例实习教程

    ArcGIS 批量修改数据名称-arcgis案例实习教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:批量修改数据/文件名称 使用方法: 输入:文件夹(或者 ...

  6. windows下consul利用json文件注册服务

    windows下,以开发模式启动consul命令 consul agent -dev -config-dir=D:\tools\consul 人工注册服务,新建一个json文件 ,放到D:\tools ...

  7. 2019 AI CITY CHALLENGE

    官网:    https://www.aicitychallenge.org/ 基于来自交通,信号系统,基础设施和运输的传感器数据,存在使运输系统更智能的巨大机会.不幸的是,由于几个原因,进展受到限制 ...

  8. Tomcat 配置文件

    Tomcat 的配置文件并不多,由4个 xml 文件组成,分别是 context.xml.web.xml.server.xml.tomcat-users.xml 这几个文件.每个文件都有自己的功能与配 ...

  9. [TestNG] [WARN] Ignoring duplicate listener : org.testng.IDEATestNGRemoteListenerEx

    1. 使用6.10,和6.14.3版本testng,出现多条warn信息 [TestNG] [WARN] Ignoring duplicate listener : org.testng.IDEATe ...

  10. JS工具类

    封装了开发中常用的操作 并添加了一些扩展方法供调用 var util = { //获取Url中的参数(不支持中文) getParams: function() { var url = location ...