我有一个简单的流程:用户点击一个按钮,一个QDialog弹出,我希望渲染一个MenuBar和MenuBar下面的一个图片(渲染发生在paintEvent期间)。
import sys
from PyQt5 import QtGui
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QDialog, QMenuBar, QAction, QHBoxLayout
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.button = QPushButton()
self.button.setText("Click")
self.button.setMaximumHeight(100)
self.button.setMaximumWidth(100)
self.button.clicked.connect(self.clicked)
self.layout().addWidget(self.button)
self.show()
def clicked(self):
self.something = SecondExample()
self.something.exec()
class SecondExample(QDialog):
def __init__(self):
super().__init__()
self.installEventFilter(self)
layout = QHBoxLayout()
toolbar = QMenuBar()
toolbar.addAction(QAction("Edit", toolbar))
toolbar.addAction(QAction("Polygon", toolbar))
toolbar.addAction(QAction("Rectangle", toolbar))
layout.setMenuBar(toolbar)
self.setLayout(layout)
self.pixmap = QPixmap(r"C:\Users\kjankosk\Desktop\Panasonic-OLED-TV-FZ950-Lifestyle.jpg")
self.resize(self.pixmap.width(), self.pixmap.height())
def paintEvent(self, event):
super().paintEvent(event)
painter = QtGui.QPainter(self)
painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
painter.drawPixmap(self.rect(), self.pixmap)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
这是我到目前为止的一个可重复的例子(编辑图片路径),然而部分图片出现在菜单栏后面。我怎样才能解决这个问题呢?我认为主要问题出在rect()的调用上,因为它似乎在使用整个窗口,但我希望菜单栏能在 "窗口外"。