单击上下文菜单时pyqt + maya =致命错误

时间:2014-12-24 12:29:50

标签: pyqt contextmenu maya

我在autodesk maya中使用pyqt。所有的工作,但当我尝试连接上下文菜单到我的元素 - 玛雅得到致命错误并关闭。

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或任何元素时 - 我看到一个上下文菜单。但如果我点击菜单或解雇它 - 可能会发生致命的错误 enter image description here

我看到日志文本 - 函数on_action_revert被调用。但在那之后 - 玛雅坠毁了。

我做错了什么?

更新

我尝试简单的测试。替换菜单以简单调用函数:

将connect替换为:

    self.filesListWgt.customContextMenuRequested.connect( self.on_action_revert )

def on_action_revert(self):
    print('on_action_revert')

这次崩溃也可能

2 个答案:

答案 0 :(得分:2)

我在Maya 2013上的PyQt和Maya 2014上的PySide(使用QtShim)测试了你的代码和你的UI文件,你的代码运行很好请检查Maya 2014的PyQt版本。

我建议您尝试在Maya 2014上使用PySide运行代码。为此,您无需更改任何代码库。你只需要修改一些导入。值得一试这些:看看这个。您可以使用它来编写PyQt和PySide兼容的代码。 https://github.com/rgalanakis/practicalmayapython/blob/master/src/chapter5/qtshim.py

要在PySide环境中加载您的ui文件,请查看以下文章:http://www.jason-parks.com/artoftech/?p=579

PyQt和PySide都是Qt框架的 python包装器。除了极少的差异外,它们是相同的。因此,无论您使用什么来运行它,您的代码库都不需要更改。

P.S。但无论出于何种原因,您对使用PyQt for 2014如此特别,请使用这些指南来构建它:https://www.google.ca/url?sa=t&source=web&rct=j&ei=bGSdVMW_KoeyyQTQgYGYAw&url=http://download.autodesk.com/us/support/files/maya_documentation/pyqtmaya2014.pdf&ved=0CB0QFjAA&usg=AFQjCNFBMjG9Rthwrei00KVHRSeJVHjggw&sig2=37J7_u0Komg3dfqu0aWwTw并且这一个:http://around-the-corner.typepad.com/adn/2013/04/building-sip-and-pyqt-for-maya-2014.html

答案 1 :(得分:0)

Maya特定的PyQt构建在由Marcus Ottosson维护的这个Github仓库中维护。您可以自己获取特定的构建并将其添加到PYTHONPATH。我在Maya 2015中遇到了同样的问题,这有帮助。

https://github.com/pyqt