PyQt5-具有工具栏的QMainWindow上的drawPixmap(不适合窗口)

时间:2018-07-22 12:07:43

标签: python pyqt pyqt5 qmainwindow

我有一个带有工具栏的QMainWindow,但我无法将QPixmap安装到窗口上,以至于无法用工具栏解决。

我要显示图片:

enter image description here

从代码中:

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_())

我得到:

enter image description here

正如您所看到的,图片也位于工具栏上,我不想要那样。

另一种尝试:

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_())

但是我得到了

enter image description here

如您所见,我看不到其中一行(蓝色的一行)。

如何修复它,使图片适合除工具栏以外的窗口? 除此之外,这意味着我必须更改所有鼠标单击才能移动y轴。也许有一种方法可以将所有内容设置为(x,y)=(0,0)位于工具栏下方的最左上方吗?

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

1 个答案:

答案 0 :(得分:1)

尽管我无法重现该问题,但以下解决方案必须可行,在该解决方案中,我将图像绘制在小部件中并将其设置为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_())