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 中显示为背景?
最佳答案
The QVBoxLayout class lines up widgets vertically.
documentation QVBoxLayout
QImage
不是小部件。在许多小部件上,例如
QmainWindow
, QLabel
您可以使用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_())
关于python-3.x - PyQt5 - 在 MainWindow 布局的背景中添加图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35422490/