我尝试了一段时间后只是简单地在QFrame的背景中显示图像而根本不能。我可以在网上看到大量的示例,但它们似乎都不适用于我的代码,我无法理解为什么:
import sys, random
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QPalette, QBrush, QPixmap
class MainWin(QtGui.QMainWindow):
def __init__(self):
super(MainWin, self).__init__()
self.initUI()
def initUI(self):
#central widget
self.theboard = Board(self)
self.setCentralWidget(self.theboard)
self.resize(360, 760)
self.setWindowTitle('Name')
self.show()
class Board(QtGui.QFrame):
def __init__(self, parent):
super(Board, self).__init__(parent)
self.initBoard()
def initBoard(self):
print("ddd")
frame = Board
palette = QPalette(self)
palette.setBrush(QPalette.Background,QBrush(QPixmap("ImageTest.jpg")))
frame.setPalette(palette)
def main():
app = QtGui.QApplication([])
mw = MainWin()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
将返回:
TypeError: QWidget.setPalette(QPalette): first argument of unbound method must have type 'QWidget'
如果我没有在变量中传递我的QFrame,请执行此操作:
palette = QPalette(self)
palette.setBrush(QPalette.Background,QBrush(QPixmap("ImageTest.jpg")))
self.setPalette(palette)
没有更多错误,但我的背景仍然是空白。同样的事情,如果我只是尝试填充颜色而不是图像。
答案 0 :(得分:1)
除非它是顶级窗口小部件,否则您需要设置autoFillBackground属性才能使其生效:
def initBoard(self):
self.setAutoFillBackground(True)
palette = QPalette(self)
palette.setBrush(QPalette.Background, QBrush(QPixmap("ImageTest.jpg")))
self.setPalette(palette)
或者,更简单地说,使用style-sheet设置背景图片:
def initBoard(self):
self.setStyleSheet('background-image: url("ImageTest.jpg")')