pyqt5中sender方法介绍_PyQt5系列教程(21):标签(QLabel)-程序员宅基地

技术标签: pyqt5中sender方法介绍  

上期我们介绍了PyQt中的液晶显示屏(QLCDNumber),这期我们介绍一下PyQt中常用的一个小部件标签(QLabel)。

总体介绍

QLabel小部件提供文本或图像显示。

QLabel用于显示文本或图像。没有提供用户交互功能。标签的外观可以通过各种方式进行配置,可以用于指定另一个小部件的焦点助记键。

QLabel可以包含以下任何内容类型:

当使用任何方法改变内容时,任何先前的内容都被清除。

警告:当在QLabel中使用setText()设置文本内容的时候,因为QLabel会尝试猜测它是将文本显示为纯文本还是作为HTML 4标记的一部分的富文本。想明确地显示文本格式,请调用setTextFormat(),例如如果您希望文本是纯文本格式,但无法控制文本源(例如,显示从Web上加载的数据时)。

默认情况下,标签显示左对齐、垂直居中的文本和图像。QLabel的外观可以通过多种方式进行调整和微调。

可以使用setAlignment()和setIndent()来调整QLabel小部件区域内的内容定位。文本内容还可以使用setwordpwrap ()沿单词边界换行。

例如,这段代码在右下角设置了一个双行文本的凹陷面板(两行与标签的右侧齐平):

label = QLabel(self)

label.resize(200,100)

label.setFrameStyle(QFrame.Panel | QFrame.Sunken)

label.setText("first line\nsecond line")

label.setAlignment(Qt.AlignBottom | Qt.AlignRight)

QLabel从QFrame继承的属性和函数,也可以用来指定要用于任何给定标签的构件框架。

QLabel的小例子

今天的例子比较多,需要一一演示。

纯文本演示

部分核心代码如下:

class Example(QWidget):

def initUI(self):

self.lb1 = QLabel('学点编程吧,我爱你~!',self)

self.lb2 = QLabel('我内容很少哦...',self)

self.lb3 = QLabel('我内容很少哦...',self)

self.lb3.setWordWrap(True)

self.bt1 = QPushButton('输入内容1',self)

self.bt2 = QPushButton('输入内容2',self)

self.ra1 = QRadioButton('左边',self)

self.ra2 = QRadioButton('中间',self)

self.ra3 = QRadioButton('右边',self)

self.bg1 = QButtonGroup(self)

self.bg1.addButton(self.ra1, 1)

self.bg1.addButton(self.ra2, 2)

self.bg1.addButton(self.ra3, 3)

self.show()

self.bg1.buttonClicked.connect(self.rbclicked)

self.bt1.clicked.connect(self.showDialog)

self.bt2.clicked.connect(self.showDialog)

def rbclicked(self):

if self.bg1.checkedId() == 1:

self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignLeft)

elif self.bg1.checkedId() == 2:

self.lb1.setAlignment(Qt.AlignCenter)

elif self.bg1.checkedId() == 3:

self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignRight)

def showDialog(self):

sender = self.sender()

if sender == self.bt1:

text, ok = QInputDialog.getText(self, '内容1', '请输入内容1:')

if ok:

self.lb2.setText(text)

elif sender == self.bt2:

text, ok = QInputDialog.getText(self, '内容2', '请输入内容2:')

if ok:

self.lb3.setText(str(text))

这个例子主要是实现了两个功能:

QLabel内容的对齐方式:这里我们给出了三个:左中、中间、右中。

当QLabel内容较多的时候,里面的内容可以换行,这里通过两个输入对话框我们对比实现了。

self.lb3 = QLabel('我内容很少哦...',self)

self.lb3.setWordWrap(True)

将WordWrap的属性设置为True,实现自动换行,默认是不能自动换行的。

def rbclicked(self):

if self.bg1.checkedId() == 1:

self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) elif self.bg1.checkedId() == 2:

self.lb1.setAlignment(Qt.AlignCenter) elif self.bg1.checkedId() == 3:

self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignRight)

当我们点击不同的单选按钮的时候会对QLabel的内容进行相应的对齐。默认情况下,标签的内容是左对齐和垂直居中的。其它的情况如下:

它包含水平和垂直的标志,可以结合起来产生所需的效果。

水平标志是:

垂直标志是:

一次最多可以使用一个水平和一个垂直标志。当然凡是也有例外,下面的就可以可表现出两个属性。

Qt.AlignCenter:水平、垂直居中

富文本演示

部分核心代码如下:

class Example(QWidget):

def initUI(self):

lb = QLabel(self)

html = '''

lb.setText(html)

self.show()

这个表格是不是很好看啊!

PyQt5的文本小部件能够显示丰富的文本,使用HTML4标记的一个子集指定,具体内容显示哪些内容,请见官方文档:https://doc.qt.io/qt-5/richtext-html-subset.html,,常用的HTML标记和CSS属性是支持的。

图片演示

部分核心代码如下:

class Example(QWidget):

def initUI(self):

pix = QPixmap('sexy.jpg')

lb1 = QLabel(self)

lb1.setGeometry(0,0,300,200)

lb1.setStyleSheet("border: 2px solid red")

lb1.setPixmap(pix)

lb2 = QLabel(self)

lb2.setGeometry(0,250,300,200)

lb2.setPixmap(pix)

lb2.setStyleSheet("border: 2px solid red")

lb2.setScaledContents(True)

图片的演示是一个对比演示。

我们先用QPixmap()创建一个QPixmap对象,然后在两个QLabel对象中分别插入,不同的地方在于:lb1我们是直接插入

lb2,我们启用了setScaledContents(True),这个函数的意义就在于是否将缩放其内容以填充所有可用空间。当启用时,标签显示一个像素图,它将缩放像素图以填充可用空间。该属性的默认值是False。

setStyleSheet()是为了便于大家查看我们设置这个标签的大小范围而已。详细的解释请看上一章节《液晶显示屏》。

动画演示

部分核心代码如下:

class Example(QWidget):

def initUI(self):

self.lb = QLabel(self)

self.lb.setGeometry(100,50,300,200)

self.bt1 = QPushButton('开始',self)

self.bt2 = QPushButton('停止',self)

self.pix = QPixmap('movie.gif')

self.lb.setPixmap(self.pix)

self.lb.setScaledContents(True)

self.bt1.clicked.connect(self.run)

self.bt2.clicked.connect(self.run)

self.show()

def run(self):

movie = QMovie("movie.gif")

self.lb.setMovie(movie)

if self.sender() == self.bt1:

movie.start()

else:

movie.stop()

self.lb.setPixmap(self.pix)

没想到吧,QLabel还有这凶残技能,放动画。。。

这段代码的关键就是QMovie的使用,简单介绍一下吧。

QMovie类是用QImageReader播放动画的便捷类。

这个类用来显示没有声音的简单的动画。如果您要显示视频和媒体内容,请改为使用Qt多媒体多媒体框架。

首先,来创建一个QMovie对象。在启动电影之前,您可以调用isValid()来检查图像数据是否有效。要启动电影,请调用start()。 QMovie将进入运行状态,并发出start()和stateChanged()。要获得电影的当前状态,请调用state()。

要在应用程序中显示电影,可以将QMovie对象传递给QLabel.setMovie()。例:

label = QLabel(self)

movie = QMovie("animations/fire.gif")

label.setMovie(movie)

movie.start()

每当电影中有新的帧时,QMovie将发出updated()信号。如果框架的大小发生变化,则发出resized()信号。您可以调用currentImage()或currentPixmap()来获取当前帧的副本。当电影完成后,QMovie发出finished()。如果播放过程中发生错误(即图像文件损坏),QMovie将发出error()。

您可以通过调用setSpeed()来控制电影播放的速度,setSpeed()将原始速度的百分比作为参数。通过调用setPaused(True)来暂停电影。 QMovie将进入暂停状态并发出stateChanged()。如果您调用setPaused(False),QMovie将重新进入运行状态并再次启动电影。要停止电影,请使用stop()。

某些动画格式允许您设置背景颜色。你可以调用setBackgroundColor()来设置颜色,或者调用backgroundColor()来获取当前的背景颜色。

currentFrameNumber()返回当前帧的序列号。如果图像格式支持,frameCount()将返回动画中的总帧数。您可以调用loopCount()来获取电影在完成前应循环的次数。 nextFrameDelay()返回当前帧应显示的毫秒数。

可以通过调用setCacheMode()来指示QMovie缓存动画帧。

调用supportedFormats()以获取QMovie支持的格式列表。

def run(self):

movie = QMovie("movie.gif")

self.lb.setMovie(movie)

if self.sender() == self.bt1:

movie.start()

else:

movie.stop()

self.lb.setPixmap(self.pix)

这个函数很简单就是当我们点击“开始”按钮的时候,播放动画;点击“停止”按钮的时候,停止动画。

最后

ok,今天的介绍暂时就到这里吧,只要时间充裕我会多发几章的。如果你喜欢本篇文章,请给我

点赞

赞赏(推荐)

分享给你的好友们吧!

如果你想要本次教程中的相关源码,请关注微信公众号:学点编程吧,发送pyqt521,会自动得到相应的百度网盘下载链接。

在实操中遇到问题?欢迎来讨论。

学点编程吧-百度贴吧--计算机程序学习的园地!--学点编程吧,让我们的生活更简单,更高效!能用计算机解决的事情,尽量不要让人解决。如果你在学习当中有任何疑问、学习心得、职业发展等内容欢迎在贴吧中分享,让我​tieba.baidu.comv2-90f579ae4e8b7a70a4324a650bf11ce4_180x120.jpg

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39710462/article/details/111553961

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法