PyQt5 标签居中显示图片(QLabel)
首先嘞!!!!回答一下标题的内容:
自己需要加一行代码
#别忘了引入欧
from PyQt5.QtCore import Qt
self.label.setAlignment(Qt.AlignCenter)
PyQt5 标签显示图片的常用方法
总体介绍
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 = '''
<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()是为了便于大家查看我们设置这个标签的大小范围而已。详细的解释请看上一章节《液晶显示屏》。
动画演示
部分核心代码如下:
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)
这个函数很简单就是当我们点击“开始”按钮的时候,播放动画;点击“停止”按钮的时候,停止动画。
转载于:https://zhuanlan.zhihu.com/p/32134728
如果大家有什么问题,欢迎关注公众号和博主进一步交流偶