QLabel是Qt库中的一个部件,通常用于显示文本或富文本文档。然而,QLabel也可以用来显示图像。
一种常见的使用QLabel显示图像的方法是使用QPixmap类。QPixmap可以从文件中接收图片,然后可以使用QLabel的setPixmap()函数将图片插入到标签中。同时,为了使图片适应标签的大小,可以通过设置图片自适应标签大小来间接修改图片尺寸。
然而,如果图像过大,直接用QLabel显示可能会出现有部分图像显示不出来的情况。这时,可以使用Scroll Area部件。将QLabel部件放到Scroll Area部件里面,将两个采用栅格布局,当图像超出了QLabel部件大小时,就会产生滑动杆,这样图像就可以都看到了。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
label = QLabel(self)
pixmap = QPixmap('test.png')
label.setPixmap(pixmap)
label.setScaledContents(True)
h_layout = QHBoxLayout()
h_layout.addWidget(label)
self.setLayout(h_layout)
if __name__ == "__main__":
app = QApplication([])
win = Window()
win.show()
sys.exit(app.exec())
在代码中
运行结果如下:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.movie = QMovie()
self.movie.setFileName('./test.gif')
self.movie.jumpToFrame(0)
self.label = QLabel()
self.label.setMovie(self.movie)
self.label.setAlignment(Qt.AlignCenter)
self.start_btn = QPushButton('开始')
self.pause_resume_btn = QPushButton('暂停')
self.stop_btn = QPushButton('停止')
self.speed_up_btn = QPushButton('加速')
self.speed_down_btn = QPushButton('减速')
self.start_btn.clicked.connect(self.control)
self.pause_resume_btn.clicked.connect(self.control)
self.stop_btn.clicked.connect(self.control)
self.speed_up_btn.clicked.connect(self.control)
self.speed_down_btn.clicked.connect(self.control)
h_layout = QHBoxLayout()
v_layout = QVBoxLayout()
h_layout.addWidget(self.start_btn)
h_layout.addWidget(self.pause_resume_btn)
h_layout.addWidget(self.stop_btn)
h_layout.addWidget(self.speed_up_btn)
h_layout.addWidget(self.speed_down_btn)
v_layout.addWidget(self.label)
v_layout.addLayout(h_layout)
self.setLayout(v_layout)
def control(self):
if self.sender() == self.start_btn:
self.movie.start()
elif self.sender() == self.pause_resume_btn:
if self.pause_resume_btn.text() == '暂停':
self.movie.setPaused(True)
self.pause_resume_btn.setText('继续')
elif self.pause_resume_btn.text() == '继续':
self.movie.setPaused(False)
self.pause_resume_btn.setText('暂停')
elif self.sender() == self.stop_btn:
self.movie.stop()
self.movie.jumpToFrame(0)
elif self.sender() == self.speed_up_btn:
speed = self.movie.speed()
self.movie.setSpeed(speed * 2)
elif self.sender() == self.speed_down_btn:
speed = self.movie.speed()
self.movie.setSpeed(speed // 2)
if __name__ == "__main__":
app = QApplication([])
win = Window()
win.show()
sys.exit(app.exec())
在代码中:
运行结果在这里只贴了一个静态图,具体运行请读者自行执行体验