2014-12-24 3 views
0

Я использую pyqt в 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. Я устанавливаю атрибут contentMenuPolicy в дизайнере в QListWidtet. когда я нажимаю правой кнопкой мыши на QListWidtet или любой элемент - я вижу контекстное меню. но если я нажму меню или увожу его - майа получит фатальную ошибку enter image description here

и я вижу текст журнала - функция on_action_revert вызывается. но после этого майя разбилась.

что я делаю неправильно?

обновление:

я попробовать простой тест. заменить меню простой вызов функции:

заменить подключения к:

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

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

это крах майа слишком

+0

Какую версию майя вы тестируете? – kartikg3

+0

Autodesk Maya 2014 – MaxKu

+0

Есть ли конкретная причина, по которой вы решили использовать pyqt над pyside, который поставляется с Maya 2014? – kartikg3

ответ

2

Я проверил ваш код вместе с файлом пользовательского интерфейса на PyQt в Maya 2013, а также на PySide (с использованием QtShim) на Maya 2014, а ваш код - штраф. Пожалуйста, проверьте ваш PyQt построить для Maya 2014.

Я рекомендую пытаться запустить свой код, используя PySide на Maya 2014. Для этого не нужно изменять любой из вашего кода базы. Вам просто нужно изменить несколько импорта. Стоит проверить их: взгляните на это. Вы можете использовать это для написания кода, который совместим как с PyQt, так и с PySide. https://github.com/rgalanakis/practicalmayapython/blob/master/src/chapter5/qtshim.py

И загрузить файл пользовательского интерфейса в среде PySide взглянуть на эту статью: http://www.jason-parks.com/artoftech/?p=579

PyQt и PySide оба только питон оберток для рамок Qt. Они идентичны, кроме очень незначительных различий. Поэтому ваша база кода никогда не должна меняться независимо от того, что вы используете для ее запуска.

P.s. Но по какому-то причине вы так особенно для использования PyQt для 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

+0

Я пытаюсь скомпилировать новую версию PyQt + Sip. И не могу этого сделать. Я не знаю, что не так, но он добирается до многих ошибок и не работает ... может быть, вы можете архивировать и отправлять свой комплект pyqt + sip для Maya 2014? У меня есть окна 7 x64 – MaxKu

+0

На студии у нас есть майя 2013, 2014 и 2015 годы. У нас только PyQt построен для Maya 2013, так как для нас не имеет смысла строить PyQt на 2014 и 2015 годы, поскольку у них есть PySide. Мы используем концепции, изложенные в моем ответе, чтобы сделать наш код PyQt запущенным во всех версиях Maya. – kartikg3

+0

Цитирование официального руководства по созданию PyQt для Maya 2014: «Однако имейте в виду, что с Maya 2014 больше не нужно создавать PySide по мере его появления по умолчанию в Maya, и вам не нужно перестраивать Qt как основной Qt инструменты для создания PyAt теперь включены в майя-дистрибутивы (Ie qmake, moc,) » – kartikg3

0

Майя конкретного PyQt строит поддерживается в этом Github репозиторий поддерживается Маркус Ottosson. Вы можете захватить конкретную сборку для себя и добавить ее в PYTHONPATH. У меня была та же проблема в Maya 2015, и это помогло.

https://github.com/pyqt

+0

извините, но проблема была решена много лет назад), и теперь я использую майа 2017+ pyside) – MaxKu

+0

@maxku: Я добавил ответ для ссылки на людей, которые все еще находятся на старой версии майи. –