#python #pyqt
#python #pyqt
Вопрос:
Заранее прошу прощения, если мой заголовок звучит очень расплывчато… Не стесняйтесь редактировать, если это необходимо? Я нахожусь в некоторой дилемме здесь, где он работал в прошлый раз, но после изменения части кода в основном скрипте у пользовательского интерфейса, похоже, возникли проблемы.
Здесь есть 2 сценария, mmvsTool.py (сценарий выполнения) и mmvsToolUI.py (сценарий пользовательского интерфейса)
Поправьте меня, если я ошибаюсь, поскольку я использую from PyQt4 import QtCore, QtGui
в качестве импортирующего предложения для виджетов PyQt, и нигде в сценариях, которые я использовал Pyside...
, когда ошибка, похоже, говорит мне использовать ее иначе?
# Traceback (most recent call last):
# File "<string>", line 1, in <module>
# File "/user_data/maya/python/mmvsTool.py", line 14, in __init__
# self.setupUi( self )
# File "/user_data/maya/python/mmvsToolUI.py", line 18, in setupUi
# mmvsFTool.setWindowIcon(icon)
# TypeError: # 'PySide.QtGui.QWidget.setWindowIcon' called with wrong argument types:
# PySide.QtGui.QWidget.setWindowIcon(QIcon)
# Supported signatures:
PySide.QtGui.QWidget.setWindowIcon(PySide.QtGui.QIcon)
Некоторое представление о коде пользовательского интерфейса, на который ссылается ошибка:
from PyQt4 import QtCore, QtGui
class Ui_mmvsTool(object):
def setupUi(self, mmvsTool):
mmvsFTool.setObjectName("mmvsTool")
mmvsFTool.resize(419, 752)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/mmvsIcons/mmvsFTool"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
mmvsFTool.setWindowIcon(icon)
Часть в основном скрипте:
from mmvsToolUI import Ui_mmvsTool
from qtswitch import QtGui
from maya import cmds as mc, mel as mm
import os
class mmvsFTool( QtGui.QWidget, Ui_mmvsTool ):
"""
"""
def __init__( self, parent = None ):
super( mmvsFTool, self ).__init__( parent = parent )
self.setupUi( self )
# this does nothing yet
self.modeWidget.setVisible( False )
Комментарии:
1. Найдите и проверьте
mmvsFTool
.2. @furas Не совсем уверен, что вы имеете в виду, но ошибка в то же время также относилась к той части, которую я вставил выше
3. Не могли бы вы скопировать и вставить сюда свои операторы импорта из обоих файлов. PyQt4 и PySide — это не одно и то же.
4. Что вы изменили с тех пор, как он работал в последний раз?
5. Что такое qtswitch? Я не смог найти никаких ссылок на нее в Google. Я предполагаю, что он используется для условного импорта либо PySide, либо PyQt, и по какой-то причине выбран PySide.
Ответ №1:
Думаю, теперь я понимаю вашу проблему.
from qtswitch import QtGui # This is maybe in PySide? Not compatible with PyQt4
измените его на:
from PyQt4 import QtGui
Затем посмотрите, работает ли это.
Комментарии:
1. Я думаю, что это работает! Но нужно протестировать еще один раунд в понедельник, чтобы быть уверенным. Могу ли я спросить, как я узнаю, когда или какой импорт принадлежит pyqt4 или pyside ?.
2. Если вы используете PyQt4, вам никогда не следует импортировать из PySide. Они являются взаимоисключающими
3. Я бы подумал, что комментарий от @user3419537 выше верен в том смысле, что предполагается, что qtswitch автоматически выбирает между PySide и PyQt4, но делает это неправильно. Возможно, вместо переключения строки qtswitch на PyQt4 вам следует изменить импорт PyQt4 в mmvsToolUi на qtswitch?
4. @three_pineapples Спасибо за комментарий. Это работает в любом случае, независимо от того, меняю ли я предложение импорта на либо
from qtswitch import QtCore, QtGui
илиfrom PyQt4 import QtCore, QtGui
. Большое спасибо! Не уверен, когда я или, может быть, кто-то перешел с PySide на PyQt4.5. @dissidia, я полагаю
mmvsToolUI
, автоматически генерируется из файла пользовательского интерфейса? В зависимости от того, какой инструмент вы используете для этого (Pyside или PyQt), будет решаться, какой инструментарий будет импортирован в этот файл. Это означает, что каждый раз, когда вы создаете класс, вам придется редактировать его и переключать строку наfrom qtswitch...
etc. Другой вариант — динамически загружать файл пользовательского интерфейса во время выполнения, но, к сожалению, синтаксис отличается в зависимости от того, используете ли вы PySide или PyQt, но вы можете это исправить (я сам это сделал в своем проекте bitbucket qtutils)