我正在为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
的原因是要在书架的背景上添加图片。我无法使用调色板,因为我希望图像不平铺并以特定方式对齐。我也知道我可以为此使用样式表,但是由于某些原因会弄混架子滚动条和工具提示气泡。
预先感谢一堆!