PyQt5 - 在带有工具栏的 QMainWindow 上绘制像素图(不适合 window)

PyQt5 - drawPixmap on QMainWindow with toolbar (can't fit to window)

我有一个带工具栏的 QMainWindow,我在将 QPixmap 与 window 相匹配时遇到了问题,因此它无法处理工具栏。

我要显示图片:

并且来自代码:

import sys
from PyQt5.QtCore import QRect
from PyQt5.QtWidgets import QAction, QMainWindow, QApplication
from PyQt5.QtGui import QPixmap, QPainter


class Menu(QMainWindow):

    def __init__(self):
        super().__init__()
        newAct = QAction('New', self)
        self.toolbar = self.addToolBar('Remove')
        self.toolbar.addAction(newAct)
        self.image = QPixmap("background.png")
        self.setGeometry(100, 30, 500, 300)
        self.resize(self.image.width(), self.image.height())
        self.show()

    def paintEvent(self, event):
        painter = QPainter(self)
        rect = QRect(0, 0, self.image.width(), self.image.height())
        painter.drawPixmap(rect, self.image)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainMenu = Menu()
    sys.exit(app.exec_())

我得到:

如您所见,图片也在工具栏上,我不想要那个。

再试一次:

import sys
from PyQt5.QtCore import QRect
from PyQt5.QtWidgets import QAction, QMainWindow, QApplication
from PyQt5.QtGui import QPixmap, QPainter


class Menu(QMainWindow):

    def __init__(self):
        super().__init__()
        newAct = QAction('New', self)
        self.toolbar = self.addToolBar('Remove')
        self.toolbar.addAction(newAct)
        self.image = QPixmap("background.png")
        self.setGeometry(100, 30, 500, 300)
        self.resize(self.image.width(), self.image.height() + self.toolbar.height())
        self.show()

    def paintEvent(self, event):
        painter = QPainter(self)
        rect = QRect(0, self.toolbar.height(), self.image.width(), self.image.height() + self.toolbar.height())
        painter.drawPixmap(rect, self.image)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainMenu = Menu()
    sys.exit(app.exec_())

但我得到:

如您所见,我没有看到任何一行(蓝色那一行)。

我怎样才能修复它,使图片适合 window 不包括工具栏? 除此之外,这意味着我必须更改所有鼠标点击以移动 y 轴。有没有一种方法可以设置所有内容,使 (x,y)=(0,0) 位于左上角,工具栏下方?

我在 windows 上使用 Python 3.6.5 |Anaconda 自定义(64 位)| PyQt 版本:5.9.2

虽然我无法重现该问题,但以下解决方案必须有效,在其中我在小部件中绘制图像并将它们设置为 centralwidget。

import sys
from PyQt5.QtCore import QRect
from PyQt5.QtWidgets import QAction, QMainWindow, QApplication, QWidget
from PyQt5.QtGui import QPixmap, QPainter

class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.image = QPixmap("background.png")
        self.setFixedSize(self.image.size())

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), self.image)


class Menu(QMainWindow):
    def __init__(self):
        super().__init__()
        newAct = QAction('New', self)
        self.toolbar = self.addToolBar('Remove')
        self.toolbar.addAction(newAct)
        self.setCentralWidget(Widget())
        self.setFixedSize(self.sizeHint())
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainMenu = Menu()
    sys.exit(app.exec_())