我在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或任何元素时 - 我看到一个上下文菜单。但如果我点击菜单或解雇它 - 可能会发生致命的错误
我看到日志文本 - 函数on_action_revert被调用。但在那之后 - 玛雅坠毁了。
我做错了什么?
更新
我尝试简单的测试。替换菜单以简单调用函数:
将connect替换为:
self.filesListWgt.customContextMenuRequested.connect( self.on_action_revert )
def on_action_revert(self):
print('on_action_revert')
这次崩溃也可能
答案 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中遇到了同样的问题,这有帮助。