当前位置: 代码迷 >> 综合 >> PyQt5系列教程(21):标签(QLabel)
  详细解决方案

PyQt5系列教程(21):标签(QLabel)

热度:79   发布时间:2024-01-12 21:53:13.0

PyQt5系列教程(21):标签(QLabel)

转自:

PyQt5之标签的使用,QLabel,具体涉及到:简单文本、富文本、图片、动画的使用
http://www.xdbcb8.com/archives/460.html

 

上期我们介绍了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 | Qt Widgets 5.10

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内容较多的时候,里面的内容可以换行,这里通过两个输入对话框我们对比实现了。

 

  1. self.lb3 = QLabel('我内容很少哦...',self)
  2. 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 = '''<style type="text/css">table.imagetable {font-family: verdana,arial,sans-serif;font-size:11px;color:#333333;border-width: 1px;border-color: #999999;border-collapse: collapse;}#...里面众多的CSS内容,我就省略了,节约空间'''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()是为了便于大家查看我们设置这个标签的大小范围而已。详细的解释请看上一章节

 

PyQt5系列教程(20):液晶显示屏

 

 

动画演示

部分核心代码如下:

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()。例:

  1. label = QLabel(self)
  2. movie = QMovie("animations/fire.gif")
  3. label.setMovie(movie)
  4. 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)

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

 

  相关解决方案