如何将图像 load/display 放到 PyQT window 上?

How to load/display an image onto a PyQT window?

我遇到了以下创建 PyQT 的代码 window。

class PrettyWidget(QtGui.QWidget):

    def __init__(self):
        super(PrettyWidget, self).__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(600,300,1000,600)
        self.center()
        self.setWindowTitle('Browser')

        self.show()    

    def center(self):
        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

def main():
    app = QtGui.QApplication(sys.argv)
    w = PrettyWidget()
    app.exec_()

if __name__ == '__main__':
    main()

我想 insert/embed 将图像添加到此 window 中(假设 image.jpg 路径已知)。它最好位于 window 的底部,并且不应占用整个 window。我该怎么做?

我们可以使用 QLabel 来显示图像,因为它有一个 setPixmap 方法,如下所示

lb = QtGui.QLabel(self)
pixmap = QtGui.QPixmap("{path/of/file}")
height_label = 100
lb.resize(self.width(), height_label)
lb.setPixmap(pixmap.scaled(lb.size(), QtCore.Qt.IgnoreAspectRatio))
self.show()  

完整代码:

class PrettyWidget(QtGui.QWidget):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent=parent)
        self.initUI()

    def initUI(self):
        self.resize(1000,600)
        self.center()
        self.setWindowTitle('Browser')

        self.lb = QtGui.QLabel(self)
        pixmap = QtGui.QPixmap("test.png")
        height_of_label = 100
        self.lb.resize(self.width(), height_of_label)
        self.lb.setPixmap(pixmap.scaled(self.lb.size(), QtCore.Qt.IgnoreAspectRatio))
        self.show()    

    def resizeEvent(self, event):
        self.lb.resize(self.width(), self.lb.height())
        self.lb.setPixmap(self.lb.pixmap().scaled(self.lb.size(), QtCore.Qt.IgnoreAspectRatio))
        QtGui.QWidget.resizeEvent(self, event)


    def center(self):
        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

def main():
    app = QtGui.QApplication(sys.argv)
    w = PrettyWidget()
    app.exec_()

if __name__ == '__main__':
    main()

截图:

底部:

def initUI(self):
    self.resize(1000,600)
    self.center()
    self.setWindowTitle('Browser')

    self.lb = QtGui.QLabel(self)
    pixmap = QtGui.QPixmap("test.png")
    height_of_label = 100
    self.lb.resize(self.width(), height_of_label)
    self.lb.move(0, self.height() -self.lb.height())
    self.lb.setPixmap(pixmap.scaled(self.lb.size(), QtCore.Qt.IgnoreAspectRatio))
    self.show()    

def resizeEvent(self, event):
    self.lb.resize(self.width(), self.lb.height())
    self.lb.setPixmap(self.lb.pixmap().scaled(self.lb.size(), QtCore.Qt.IgnoreAspectRatio))
    self.lb.move(0, self.height() -self.lb.height())
    QtGui.QWidget.resizeEvent(self, event)

截图: