2017-06-30 2 views
0

Ich habe ein UI-Fenster für Autodesk Maya 2015 gemacht. Jedes Mal, wenn ich das Skript in Maya Skript-Editor ausführen, funktioniert es gut, die UI wird gestartet und es dockt ordnungsgemäß im Haupt Maya-Fenster.Maya UI nicht nach dem Ausführen von Skript docken

Nach dem Schließen des UI-Fensters und dem erneuten Ausführen des Skripts wird das Fenster jedoch nicht mehr angedockt. Es bleibt auf dem Hauptbildschirm hängen und ich muss die ganze Software schließen. Es scheint, dass die Benutzeroberfläche das Haupt-Maya-Fenster nicht mehr finden kann, nachdem ich es das erste Mal geschlossen habe. Ich bin mir nicht sicher, wie ich das beheben soll. Kann mir jemand Ratschläge geben, wie ich dieses Problem beheben kann?

Hier ist mein Code:

def getMayaWindow(): 
    ptr = apiUI.MQtUtil.mainWindow() 
    if ptr is not None: 
     return shiboken.wrapInstance(long(ptr), QtGui.QMainWindow) 

class pipeWindow(formClass,baseClass): 
    def __init__(self, parent=getMayaWindow()): 
     super(pipeWindow,self).__init__(parent) 

     self.setupUi(self) 
     self.setObjectName('pipe_window') 

     try: 
      cmds.deleteUI('dockPane') 
     except: 
      pass     
     self.pane = cmds.paneLayout('dockPane', cn='single') 

     if 'pipeDock' not in cmds.lsUI(ctl=1) : 
      cmds.dockControl('pipeDock', con=self.pane, area='right', 
           allowedArea = ['right','left'], label = 
          "ANMD_Pipeline", w=365)    
     else: 
      pass 
     cmds.control('pipe_window', e=True, p=self.pane) 
+0

Es wäre nützlich zu sehen, FormClass und BaseClass-Implementierungen (ich nehme an, sie sind PySide UIs, richtig?). Die mehrfache Vererbung kann schwierig sein (wenn Sie sich nicht damit auskennen, sehen Sie sich https://stackoverflow.com/a/3277407/8200213 an). Auch die gesamte 'pipeWindow'-Struktur ist mir unklar: Sie Eltern einige PySide UI (wahrscheinlich nur' formClass') in das Hauptfenster, aber dann übergeben Sie ein 'paneLayout' zu' dockControl': Ich verstehe nicht, wie es geht arbeiten, sogar bei der ersten Ausführung. Wenn Sie Ihre aktuelle Lösung nicht schätzen, sollten Sie 'MayaQWidgetDockableMixin' verwenden; Ansonsten bitte den Code weiter erläutern – mapofemergence

Antwort

0

Nachdem mehrere Dinge auszuprobieren, habe ich es geschafft, dieses Problem zu lösen. Ich habe

if cmds.dockControl('pipeDock', q=1, ex=1): 
    cmds.deleteUI('pipeDock') 

Dann eine super(className, self).closeEvent(event) in einer closeEvent Funktion Ich habe verwendet. Das hat den Trick für mich gemacht. Das hat den Trick für mich gemacht. Zuvor hatte ich die cmds.deleteUI innerhalb meiner closeEvent Funktion, die nicht funktionierte, ich vermute, dass es war, weil ich das Ereignis selbst nicht geschlossen habe, so verbirgt sich die Benutzeroberfläche nur, wenn ich die Kreuztaste drücke, anstatt sie zu löschen.

Verwandte Themen