/ / python problemy z super - python-2.7, pyside, maya, super

problemy z pythonem z super - python-2.7, pyside, maya, super

Ok, więc mam mały problem z poniższym kodem. Działa tak, jak jest, ale jeśli spróbuję zmienić część z komentarzem o tym, że nie mogę uzyskać super, aby działać poprawnie.

pipeline_class_call = super(Error_Popup,self)
broken_file_w_whats_wrong = pipeline_class_call.whats_wrong_with_file()

lub

 broken_file_w_whats_wrong = super(Error_Popup,self).whats_wrong_with_file()

i zmienić

class Error_Popup(QtGui.QDialog):

do

class Error_Popup(QtGui.QDialog,Pipeline_UI):

Otrzymuję następujący błąd

# TypeError: object of type "instancemethod" has no len() #

Co zwykle oznacza, że ​​muszę wywołać metodę, ale nie radzi sobie z tym wszystkim super. A może robię to głupio?

from PySide import QtCore, QtGui
from shiboken import wrapInstance
import pymel.core as pm
import maya.OpenMayaUI as omui
from UI.UI import Pipeline_UI

def something_bad_happened_window():
sbh_pointer = omui.MQtUtil.mainWindow()
return wrapInstance(long(sbh_pointer), QtGui.QWidget)

class Error_Popup(QtGui.QDialog):

def __init__(self,parent=something_bad_happened_window()):
super(Error_Popup,self).__init__(parent)

self.setWindowTitle("Something Bad Happened!")
self.setWindowFlags(QtCore.Qt.Tool)
self.popup_layout()
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.connections()

def popup_layout(self):
self.file_description = QtGui.QListWidget()


#cant seem to get super to work appropriately... booo
pipeline_class_call = Pipeline_UI()
broken_file_w_whats_wrong = pipeline_class_call.whats_wrong_with_file()

for display in range(0,len(broken_file_w_whats_wrong)):

broken_list = QtGui.QListWidgetItem()
if display % 2 == 0:
broken_list.setText(broken_file_w_whats_wrong[display][0])
broken_list.asset = broken_file_w_whats_wrong[display][1]

else:
broken_list.setText("   " + broken_file_w_whats_wrong[display][0])

self.file_description.addItem(broken_file_w_whats_wrong[display])

self.import_button = QtGui.QPushButton("Import Replacement(s)")

error_layout = QtGui.QVBoxLayout()
error_layout.setContentsMargins(2,2,2,2)
error_layout.setSpacing(2)


error_layout.addWidget(self.file_description)
error_layout.addWidget(self.import_button)

error_layout.addStretch()


self.setLayout(error_layout)

def connections(self):
self.import_button.clicked.connect(Error_Popup.make_sphere)


@classmethod
def make_sphere(cls):
pm.polySphere()


def show_window():

ui = Error_Popup()

if __name__ == "__main__":
try:
ui.close()
except:
pass

ui.show()

show_window()

Z góry dziękuję wszystkim

Odpowiedzi:

1 dla odpowiedzi № 1

Wydaje mi się, że to problem z używaniem super z dziedziczeniem wielokrotnym. Wybiera jednego z rodziców w określonej kolejności do użycia. Na przykład, super(Error_Popup,self).__init__(parent) dzwoni tylko do jednego z rodziców __init__ metody. Musisz ręcznie zadzwonić do wszystkich z nich.

Podczas wywoływania metod lub uzyskiwania dostępu do zmiennych musisz dokładnie określić, którego rodzica chcesz użyć lub super wybierze dla Ciebie. Widzieć ta odpowiedź i ta odpowiedź.