【发布时间】:2020-02-22 20:41:02
【问题描述】:
我在 Autodesk Maya 中使用 pyqt。一切正常,但是当我尝试将上下文菜单连接到我的元素时 - maya 出现致命错误并关闭。
import maya.OpenMayaUI as mui
import maya.api.OpenMaya as om
import sip
from PyQt4 import QtGui, QtCore, uic
#----------------------------------------------------------------------
def getMayaWindow():
ptr = mui.MQtUtil.mainWindow()
return sip.wrapinstance(long(ptr), QtCore.QObject)
#----------------------------------------------------------------------
form_class, base_class = uic.loadUiType('X:/tools/Maya/windows/2014/python/UI/perforceBrowserWnd.ui')
#----------------------------------------------------------------------
# main window class
#----------------------------------------------------------------------
class PerforceWindow(base_class, form_class):
def __init__(self, parent=getMayaWindow()):
super(base_class, self).__init__(parent)
self.setupUi(self)
# Popup Menu is not visible, but we add actions from above
self.popMenu = QtGui.QMenu( self )
self.popMenu.addAction("revert", self.on_action_revert)
self.popMenu.addAction("submit", self.on_action_submit)
self.filesListWgt.customContextMenuRequested.connect( self.filesListWgtMenuRequested )
#------------------------------------------------------------------
def filesListWgtMenuRequested(self, pos):
self.popMenu.exec_( self.filesListWgt.mapToGlobal(pos) )
def on_action_revert(self):
print('on_action_revert')
def on_action_submit(self):
print('on_action_submit')
#----------------------------------------------------------------------
# window
#----------------------------------------------------------------------
def perforceBrowser2():
perforceBrowserWnd = PerforceWindow()
perforceBrowserWnd.show()
perforceBrowser2()
在 qtdesigner 中创建的对话框。我在 QListWidtet 的设计器中设置了属性 contentMenuPolicy。当我右键单击 QListWidtet 或任何元素时 - 我看到一个上下文菜单。但是如果我单击菜单或将其关闭 - 玛雅会出现致命错误
我看到了日志文本 - 调用了函数 on_action_revert。但在那之后 - 玛雅坠毁了。
我做错了什么?
更新:
我尝试简单的测试。替换菜单以简单调用函数:
替换连接到:
self.filesListWgt.customContextMenuRequested.connect( self.on_action_revert )
def on_action_revert(self):
print('on_action_revert')
这也是玛雅崩溃
【问题讨论】:
-
您在哪个版本的 Maya 上进行测试?
-
您选择使用 pyqt 而非 Maya 2014 附带的 pyside 是否有特殊原因?
-
机会 pyqt 以上。包括我可以在 qtdesigner 中创建一个窗口的事实。除此之外,我总是使用这些在pyqt上制作的窗口,而不仅仅是在maya中。不是选择pyside或pyqt的问题。但是如何使它正常工作(
-
我会调查这个问题,但只是附带说明:我们可以使用 PySide 作为 PyQt 的完全替代品,建议在 Maya 2014+ 中这样做。您也可以继续使用为此设计的 Qt。 Maya 2014+ 自带 PySide;我们需要确保您的 PyQt for Maya 没有构建问题。如果您在 PySide 中执行此操作,则无需执行此操作。看看这篇文章:jason-parks.com/artoftech/?p=579
-
看看这个。您可以使用它来编写在 PyQt 和 PySide 中都兼容的代码。 github.com/rgalanakis/practicalmayapython/blob/master/src/…
标签: pyqt contextmenu maya