Python pyside通过样式表设置背景图像无效
我试图通过pyside设置QGridLayout小部件的背景图像(与应用程序位于同一文件夹中),但没有任何效果。我查看了所有关于样式表的TUT、文档和论坛帖子,但我仍然不知道我做错了什么Python pyside通过样式表设置背景图像无效,python,stylesheet,pyside,Python,Stylesheet,Pyside,我试图通过pyside设置QGridLayout小部件的背景图像(与应用程序位于同一文件夹中),但没有任何效果。我查看了所有关于样式表的TUT、文档和论坛帖子,但我仍然不知道我做错了什么 from PySide.QtCore import * from PySide.QtGui import * import sys class Main(QWidget): def __init__(self, parent=None): super(Main, self).__in
from PySide.QtCore import *
from PySide.QtGui import *
import sys
class Main(QWidget):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
j = 0
pos = [(0, 0), (0, 1), (0, 2), (0, 3),
(1, 0), (1, 1), (1, 2), (1, 3),
(2, 0), (2, 1), (2, 2), (2, 3),
(3, 0), (3, 1), (3, 2), (3, 3),
(4, 0), (4, 1), (4, 2), (4, 3),
(5, 0), (5, 1), (5, 2), (5, 3)]
grid = QGridLayout(self)
items = ["one", "Two", 'Three','four','five']
for e in items:
picture = ImageLabel("Book.png", self)
picture.name = e
picture.setFixedSize(128,128)
picture.mousepos = str(picture.pos())
picture.imageClicked.connect(self.anotherSlot)
grid.addWidget(picture, pos[j][0], pos[j][1])
j = j + 1
picture.setToolTip('This is' + str(e) + ' widget')
picture.imageHovered.connect(self.Item_Hovered)
self.setStyleSheet("QGridLayout {background-image: url(./image.jpg) }");
def anotherSlot(self):
sender = self.sender()
print "I clicked item " + str(sender.name)
def Item_Hovered(self):
sender = self.sender()
print "I'm Hovering over " + str(sender.name)
class ImageLabel(QLabel):
imageClicked = Signal(str) # can be other types (list, dict, object...)
imageHovered = Signal(str)
imageLeave = Signal(str)
def __init__(self, image, parent=None):
super(ImageLabel, self).__init__(parent)
self.setPixmap(image)
# self.setMouseTracking(True)
def mousePressEvent(self, event):
print "from ImageLabel.mousePressEvent()"
self.imageClicked.emit("Image Clicked")
def enterEvent(self, event):
print "from ImageLabel.enterEvent()"
self.imageHovered.emit("Hovering")
def leaveEvent(self, event):
print "from ImageLabel.leaveEvent()"
self.imageLeave.emit("Hovering No More")
a = QApplication([])
m = Main()
m.show()
sys.exit(a.exec_())
如果您有任何建议,我们将不胜感激。即使它有效,您也不会得到预期的结果,我实现正确背景绘制的唯一方法是覆盖paintEvent
tile = QtGui.QPixmap("x.png")
def paintEvent(self, pe):
painter = QtGui.QPainter(self)
painter.drawTiledPixmap(self.rect(), tile)
super(Console, self).paintEvent(pe)
控制台是我的类类控制台(QtGui.QMainWindow):
该示例适用于整个窗口
我不确定painter构造函数是否可以从paintEvent
palette = QtGui.QPalette()
palette.setBrush(QtGui.QPalette.Background, tile)
self.setPalette(palette)
更新:看起来需要在每个paintEvent
palette = QtGui.QPalette()
palette.setBrush(QtGui.QPalette.Background, tile)
self.setPalette(palette)
我找到了一种不覆盖paintEvent
palette = QtGui.QPalette()
palette.setBrush(QtGui.QPalette.Background, tile)
self.setPalette(palette)
正如sherpya在上面解释的那样,实现小部件/窗口背景图像的最简单方法是定制所讨论的特定小部件的paintEvent处理程序,下面是基于上面解释的代码,它最终起到了作用
def paintEvent(self, event):
self.tile= QPixmap("bookshelf.png")
painter = QPainter(self)
painter.drawTiledPixmap(self.rect(), self.tile)
super(Main, self).paintEvent(event)
sherpyas代码没有解释(这实际上帮助我理解了paintEvent)的是self.tile变量包含实际的pixmap图像,如果在paint变量本身中引用该图像的话
self.tile= QPixmap("bookshelf.png")
将在样式表创建错误的小部件/窗口的背景中绘制图像 选中,它列出了可以使用样式表自定义的小部件
QGridLayout继承自QLayout、QLayoutItem和QObject。根据参考资料,这些都不能使用样式表进行样式设置
与其自定义paintEvent处理程序,不如尝试将布局放在QFrame中。QFrame支持CSS框模型,因此您可以在QFrame上使用背景图像属性。感谢sherpya花了一点时间来帮助我理解它,但我成功了。让我对你的解释感到困惑的是self.tile,它是实际的pix贴图图像变量