PyQt5 - 在MainWindow布局中添加背景图片

5

如果你是PyQt5新手,这里有一个非常基础的问题。

我想在小部件的布局中添加一张图片。这个小部件是我的应用程序的主窗口/根部件。我使用以下代码,但是出现了错误信息。

import sys

from PyQt5.QtGui import QImage
from PyQt5.QtWidgets import *

class MainWindow(QWidget):

    def __init__(self):

       super().__init__()

       self.setGeometry(300,300,300,220)
       self.setWindowTitle("Hello !")

       oImage = QImage("backgound.png")

       oLayout = QVBoxLayout()
       oLayout.addWidget(oImage)

       self.setLayout(oLayout)

       self.show()

if __name__ == "__main__":

    app = QApplication(sys.argv)

    oMainwindow = MainWindow()

    sys.exit(app.exec_())


TypeError: QBoxLayout.addWidget(QWidget, int stretch=0, Qt.Alignment alignment=0): argument 1 has unexpected type 'QImage'

显然,QLayoutWidget不接受QImage作为输入。是否有一种解决方法可以使图像显示为QWidget的背景?

1个回答

9

VBoxLayout 类可将小部件垂直排列。

QVBoxLayout文档

QImage 不是小部件。

在许多小部件上,例如 QMainWindowQLabel,您可以使用

widget.setStyleSheet(„ background-image: url(backgound.png);“)

在我的电脑上,使用 QWidget 无法正常工作。在这种情况下,您可以使用以下代码重写:

import sys
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QImage, QPalette, QBrush
from PyQt5.QtWidgets import *

class MainWindow(QWidget):
    def __init__(self):
       QWidget.__init__(self)
       self.setGeometry(100,100,300,200)

       oImage = QImage("test.png")
       sImage = oImage.scaled(QSize(300,200))                   # resize Image to widgets size
       palette = QPalette()
       palette.setBrush(QPalette.Window, QBrush(sImage))                        
       self.setPalette(palette)

       self.label = QLabel('Test', self)                        # test, if it's really backgroundimage
       self.label.setGeometry(50,50,200,50)

       self.show()

if __name__ == "__main__":

    app = QApplication(sys.argv)
    oMainwindow = MainWindow()
    sys.exit(app.exec_())

代码与setPalette在我的MainWindow上运行良好。现在,MainWindow还包含一个QTabWiget,我正在尝试设置这些QTabWidget页面的背景图像。我尝试使用setPalette和setStyleSheet,但似乎都不起作用。是否可以将图像设置为其他小部件(不仅是窗口)的背景?以下内容无法正常工作:MyPage.setStyleSheet(“background-image:url(myimage.jpg);”)MyPage.setPalette(palette) - martin_0004
我可以在QTabWidget以及页面(QWidget)上设置setStyleSheet。如果您无法解决问题,应该使用您的代码提出一个新问题。 - a_manthey_67
我在这里创建了一个新问题,附带我的新代码。http://stackoverflow.com/questions/35468937/pyqt5-image-as-background-for-qtabwidgetpage - martin_0004
我尝试了这段代码,但是背景图像没有显示出来,取而代之的是黑屏,并且我的按钮出现在屏幕上。有什么解决办法吗? - Rajat
你的工作目录中有 test.png 吗?控制台中有任何错误消息吗? - a_manthey_67
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接