pyqt label插入图片时,按原图片长宽比显示
时间: 2023-07-05 10:30:13 浏览: 152
可以使用QPixmap来加载图片,并将其设置为QLabel的背景,然后设置QLabel的尺寸策略为`QSizePolicy::Ignored`,并调用`setScaledContents(true)`方法,以按比例缩放图像并适应标签的大小。
以下是一个示例代码:
```python
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QLabel, QWidget, QVBoxLayout, QApplication
class ImageLabel(QLabel):
def __init__(self, parent=None):
super().__init__(parent)
self.setAlignment(Qt.AlignCenter)
self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
self.setScaledContents(True)
def setPixmap(self, pixmap):
if not pixmap.isNull():
super().setPixmap(pixmap.scaled(self.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))
def resizeEvent(self, event):
if not self.pixmap().isNull():
self.setPixmap(self.pixmap())
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout()
label = ImageLabel(self)
pixmap = QPixmap('image.jpg')
label.setPixmap(pixmap)
vbox.addWidget(label)
self.setLayout(vbox)
self.setWindowTitle('PyQt5 Label with Image')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个名为`ImageLabel`的自定义标签,它继承自`QLabel`并重写了`setPixmap()`和`resizeEvent()`方法。在`setPixmap()`方法中,我们将传递给它的QPixmap对象缩放到标签的大小并设置为标签的背景。在`resizeEvent()`方法中,每当标签的大小更改时,它会重新计算并设置QPixmap对象的大小。在`MainWindow`类中,我们创建一个`ImageLabel`对象并将其添加到垂直布局中。
请将“image.jpg”替换为您的图像文件路径。
阅读全文