如何覆盖Maya中已经存在的QWidget的paintEvent?

时间:2018-07-11 15:49:04

标签: python qt pyside maya pyside2

我正在为Maya 2018开发工具。当我运行下面的代码时,使用PySide创建的窗口可以正常工作-红色背景上方有一行,但是用{{ 1}}:

maya.cmds

我猜想在使用import types import shiboken2 import maya.cmds as mc import maya.OpenMayaUI as omui from PySide2.QtCore import * from PySide2.QtGui import * from PySide2.QtWidgets import * def paintEvent(self, event, inherit): painter = QPainter(self) painter.drawLine(0, 0, 100, 100) inherit(event) qwid = QWidget() qwid.setWindowTitle('Qt window') qwid.show() mwin = mc.window(title='Maya window') mc.showWindow(mwin) mwid = shiboken2.wrapInstance(long(omui.MQtUtil.findControl(mwin)), QWidget) for wid in (qwid, mwid): pal = wid.palette() pal.setBrush(pal.Window, QColor('darkred')) wid.setPalette(pal) inherit = wid.paintEvent wid.paintEvent = types.MethodType(lambda x, y: paintEvent(x, y, inherit), wid, wid.__class__) 时翻译中会丢失一些东西,但是我以前从未见过有人对此抱怨过。关于为什么会发生这种情况的任何想法?

此外,我完全开放了替代方法来替代Maya中现有小部件的shiboken2.wrapInstance。我知道该解决方案在示例代码中非常明显(只需使用PySide创建窗口即可),但是我正在尝试将此原理应用于已经存在的货架。

我要覆盖paintEvent的原因是要在书架的背景上添加图片。我无法使用调色板,因为我希望图像不平铺并以特定方式对齐。我也知道我可以为此使用样式表,但是由于某些原因会弄混架子滚动条和工具提示气泡。

预先感谢一堆!

0 个答案:

没有答案