繁体   English   中英

PyQt5-调整标签大小以填充整个窗口

[英]PyQt5 - resize label to fill the whole window

from PyQt5 import QtGui, QtCore, QtWidgets

class Window(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.label = QtWidgets.QLabel(self)
        self.label.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored)
        self.label.resize(800, 600)
        self.label.setContentsMargins(0, 0, 0, 0);
        self.pixmap = QtGui.QPixmap("image.jpg")
        self.label.setPixmap(self.pixmap)
        self.label.setMinimumSize(1, 1)
        self.label.installEventFilter(self)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.label)

    def eventFilter(self, source, event):
        if (source is self.label and event.type() == QtCore.QEvent.Resize):
            self.label.setPixmap(self.pixmap.scaled(
                self.label.size(), QtCore.Qt.KeepAspectRatio))
        return super(Window, self).eventFilter(source, event)

if __name__ == '__main__':

    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.show()
    window.resize(800, 600)
    sys.exit(app.exec_())

这是我的应用程序,我的目标很简单-在整个窗口中设置图像,并在窗口调整大小后重新调整大小。

这段代码可以调整图像大小,但是标签不能覆盖整个窗口,我有那些“边界”。 如何删除它们/将标签调整为窗口大小? 如果这会改变事情,我正在Windows上工作。

窗口外观

那就是我现在得到的效果。

我在PyQt4中解决了该问题,所以我不确定100%是否适用于PyQt5,但我想应该这样做(可能需要进行一些小的修改,例如,导入PyQt5而不是PyQt4)。

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.label = QtGui.QLabel(self)
        self.label.resize(800, 600)
        pixmap1 = QtGui.QPixmap("image.png")
        self.pixmap = pixmap1.scaled(self.width(), self.height())
        self.label.setPixmap(self.pixmap)
        self.label.setMinimumSize(1, 1)

    def resizeEvent(self, event):
        pixmap1 = QtGui.QPixmap("image.png")
        self.pixmap = pixmap1.scaled(self.width(), self.height())
        self.label.setPixmap(self.pixmap)
        self.label.resize(self.width(), self.height())

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    window.resize(800, 600)
    sys.exit(app.exec_())

对您来说最重要的是resizeEvent定义。 您可以使用已经定义的self.pixmap并调整其大小,但是图像的质量会随着您使用的调整大小而降低。 因此,最好总是创建缩放到当前Window widthheight的新pixmap

无需在单独的QWidget创建QLabel 您可以简单地继承QLabel而不是QWidget 它将使您的代码更加简单和简洁:

class MyLabelPixmap(QtWidgets.QLabel):
    def __init__(self):
        QtWidgets.QLabel.__init__(self)
        self.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored)
        self.resize(800, 600)
        self.pixmap = QtGui.QPixmap("image.jpg")
        self.setPixmap(self.pixmap)
        self.installEventFilter(self)

    def eventFilter(self, source, event):
        if (source is self and event.type() == QtCore.QEvent.Resize):
            self.setPixmap(self.pixmap.scaled(self.size()))
        return super(Window, self).eventFilter(source, event)

如果您想将MyLabelPixmap小部件嵌入到QMainWindow只需添加QMainWindow.__init__

self.myLabelPixmap = MyLabelPixmap()
self.setCentralWidget(self.myLabelPixmap) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM