我有一段时间试图简单地在 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)
没有更多错误,但我的背景仍然是空白。如果我只是尝试填充颜色而不是图像,也会发生同样的情况。
最佳答案
除非它是顶级小部件,否则您需要设置 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")')
关于python - pyQT4 py3无法在QFrame背景中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26217977/