pyQT4 py3无法在QFrame背景中显示图像

时间:2014-10-06 14:02:23

标签: python image background widget pyqt

我尝试了一段时间后只是简单地在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)

没有更多错误,但我的背景仍然是空白。同样的事情,如果我只是尝试填充颜色而不是图像。

1 个答案:

答案 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")')