2014-10-06 39 views
1

我嘗試了一段時間,只是簡單地在QFrame的背景中顯示圖像,根本不能。我可以看到例如負載在網絡上,但他們都不似乎與我的代碼工作,我不明白爲什麼:pyQT4 py3無法在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

除非它是一個頂級窗口部件,你需要設置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")') 
+0

這真是太好了非常感謝你的回答,現在一切都很好。 – 2014-10-06 19:02:46