技术标签: 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.com
文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别
文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具
文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量
文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置
文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖
文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...
文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序
文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码
文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型
文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件
文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令
文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线