如何更改QMainWindow中央小部件的背景图像

2024-09-10 21:39:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试更改QMainWindow中心小部件的背景图像。QMainWindow的背景很容易更改,但是我无法用它的中心小部件得到相同的结果。我试过的是密码

self.mdi = QMdiArea()
self.options_window = Options()
self.central_widget = QStackedWidget()
self.mdi.setStyleSheet("{background-image: url(ninja.png);}")
self.setCentralWidget(self.central_widget)
self.central_widget.addWidget(self.mdi)
self.central_widget.addWidget(self.options_window)
self.central_widget.setCurrentWidget(self.mdi)

我也试过这个

^{pr2}$

有人能给我解释一下这个问题吗?在


Tags: 图像self密码部件widgetwindow中心options
1条回答
网友
1楼 · 发布于 2024-09-10 21:39:17

要更改QWidget的背景图像,您应该重写paintEvent方法,在QStackedWidget中,我们创建一个继承自以下内容的类:

class StackedWidget(QStackedWidget):
    def __init__(self, parent=None):
        QStackedWidget.__init__(self, parent=parent)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), QPixmap("ninja.png"))
        QStackedWidget.paintEvent(self, event)

然后你改变了:

^{pr2}$

收件人:

self.central_widget = StackedWidget()

示例:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class StackedWidget(QStackedWidget):
    def __init__(self, parent=None):
        QStackedWidget.__init__(self, parent=parent)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), QPixmap("image.png"))
        QStackedWidget.paintEvent(self, event)

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent=parent)
        self.setCentralWidget(StackedWidget())

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

截图:

enter image description here

QStackedWidget的情况是一个特殊情况,因为它没有显示,这是用来显示其他窗口小部件的,对于这些小部件,您必须更改背景图像。在

在您的代码中,它们附加的第一个小部件是QMdiArea,这也是一个特殊情况,因为它有一个视区,应该进行更改。在

class MdiArea(QMdiArea):
    def __init__(self, parent=None):
        QMdiArea.__init__(self, parent=parent)

    def paintEvent(self, event):
        QMdiArea.paintEvent(self, event)
        painter = QPainter(self.viewport())
        painter.drawPixmap(self.rect(), QPixmap("image.png"))

在代码更改中:

self.mdi = QMdiArea()

收件人:

self.mdi = MdiArea()

截图:

enter image description here

enter image description here

相关问题 更多 >