[PYTHON] [Ergänzung] [PySide] Spielen wir mit Qt Designer

Dieser Artikel wird durch das Studium von PySide (das begleitende QtDesigner-Studium) erledigt.

** [PySide] Lass uns mit QtDesigner spielen ** @ * mtazmi-Lab * http://mtazmi-lab.blogspot.jp/2013/01/QtDesiner.html

Über Als Antwort auf die hier erstellte Benutzeroberfläche möchte ich ein Skript schreiben, das Informationen erfasst und etwas veröffentlicht.

Danke mtazmi, danke für deine Hilfe m (_ _) m

Vor dem Akzeptieren

Was meinst du? Dieser Artikel ist ein wunderbarer Artikel über ** Erstellen einer Benutzeroberfläche mit QtDesigner ** In den Artikeln davor und danach werden auch Beispiele mit PySide und QtDesigner erläutert.

Der Operationsteil wurde jedoch nicht für die Benutzeroberfläche selbst vorbereitet, die im Artikel angezeigt wird Ich möchte eine kleine Geschichte schreiben, die diesen Punkt unter Beachtung von MAX ergänzt. Ich dachte.

Ergänzung

Die Artikel davor und danach sind hier. Bitte komm zusammen

[PySide] Lass uns mit PySide spielen http://mtazmi-lab.blogspot.jp/2012/12/pythonPySide01.html

[PySide] Nehmen wir verschiedene Werte von der Benutzeroberfläche http://mtazmi-lab.blogspot.jp/2013/01/pysidegetvalue.html

Ersteres liegt relativ nahe an dieser Route, Letzteres ist ein Kratzer von PySide ohne Verwendung von Qt Designer

Vorbereitung der Benutzeroberfläche

Lassen Sie uns eine Benutzeroberfläche gemäß dem Originalartikel erstellen. Qt Designer befindet sich übrigens im Maya-Installationsordner unter "bin". ** designer.exe ** ist das.

C:\Program Files\Autodesk\Maya{ver}\bin\designer.exe

Shinchoku 1 01.png

Shinchoku 2 02.png

Ich war in der Lage Speichern Sie die .ui-Datei an einem guten Ort. Der Dateiname lautet hier mayapyAdCl.ui.

Bewegliches Teil

Ich werde einen bewegenden Teil machen.

Hier ist zunächst das Skript des Artikels

# -*- coding: utf-8 -*-
 
import os
import sys
 
from PySide import QtCore, QtGui
from PySide.QtUiTools import QUiLoader
 
CURRENT_PATH = os.path.dirname(__file__)
 
#----------------------------------------------------------------------------
##Klasse, um GUI zu machen
class GUI(QtGui.QMainWindow):
 
    def __init__(self, parent=None):
        super(GUI, self).__init__(parent)
        loader = QUiLoader()
        uiFilePath = os.path.join(CURRENT_PATH, 'mayapyAdCl.ui')
        self.UI = loader.load(uiFilePath)
        self.setCentralWidget(self.UI)
 
#------------------------------------------------------------------------------ 
##Starten Sie die GUI
def main():
    app = QtGui.QApplication(sys.argv)
    app.setStyle('plastique')    #← Geben Sie hier den Stil an
    ui = GUI()
    ui.show()
    sys.exit(app.exec_())
 
 
if __name__ == '__main__':
    main()
 
#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------

Speichern Sie dies an derselben Stelle wie die vorherige .ui. Nennen Sie es "mayapyAdCl.py".

Fügen Sie ein bewegliches Teil hinzu

Siehe den vorherigen Artikel des Originalartikels, Versuchen Sie Folgendes, während Sie sich die PySide-Dokumentation ansehen.

# -*- coding: utf-8 -*-

from PySide import QtCore, QtGui
from PySide.QtUiTools import QUiLoader

import maya.cmds as cmds
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin

CURRENT_PATH = os.path.dirname(__file__)

#----------------------------------------------------------------------------
##Klasse, um GUI zu machen
class GUI(MayaQWidgetBaseMixin, QtGui.QMainWindow):
 
    def __init__(self, parent=None):
        super(GUI, self).__init__(parent)
         
        #UI-Datei wird geladen
        loader = QUiLoader()
        uiFilePath = os.path.join(CURRENT_PATH, 'mayapyAdCl.ui')
        self.UI = loader.load(uiFilePath)
        self.setCentralWidget(self.UI)
         
        #Geben Sie den Titel des Fensters an
        self.setWindowTitle(u'Es ist ein UI-Beispiel')
        #Geben Sie die Größe des Fensters an
        self.resize(256, 128)
         
        #Signal zum UI-Element hinzufügen
        self.setSignals()
 
    #----------------------------------------
    ##Signalregistrierung
    # @param None
    # @return None
    def setSignals(self):
        #Verhalten beim Drücken der Apply-Taste
        self.UI.apply_btn.clicked.connect(self.doIt)
        #Wenn Sie auf die Schaltfläche Anwenden und Schließen klicken(ry
        self.UI.applyClose_btn.clicked.connect(self.doIt_close)
        #Schaltfläche zum Schließen(ry
        self.UI.close_btn.clicked.connect(self.close)

    ##Sperren, wenn aktiviert
    def doIt(self):
        chbxState = {
                     'tx':self.UI.tx_chbx.isChecked(),
                     'ty':self.UI.ty_chbx.isChecked(),
                     'tz':self.UI.tz_chbx.isChecked(),
                     'rx':self.UI.rx_chbx.isChecked(),
                     'ry':self.UI.ry_chbx.isChecked(),
                     'rz':self.UI.rz_chbx.isChecked(),
                     'sx':self.UI.sx_chbx.isChecked(),
                     'sy':self.UI.sy_chbx.isChecked(),
                     'sz':self.UI.sz_chbx.isChecked()
                    }
        
        objs = cmds.ls(sl=True)
        if not objs:
            print 'no object selected...'
            return
            
        for obj in objs:
            for ch in chbxState:
                attr = '.'.join([obj,ch])
                cmds.setAttr(attr,lock=False)
                if chbxState[ch]:
                    cmds.setAttr(attr,lock=True)

    ##doIt und dann schließen
    def doIt_close(self):
        self.doIt()
        self.close()



#------------------------------------------------------------------------------ 
##Starten Sie die GUI
def main():
    app = QtGui.QApplication.instance()
    ui = GUI()
    ui.show()
    
    return ui
 
 
if __name__ == '__main__':
    main()
 
#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------

Ein Beispiel ist, zu ermitteln, ob ein Kontrollkästchen aktiviert ist, und den Kanal zu sperren, falls dies der Fall ist.

Lauf

import sys
sys.path.append('path/to/your/scripts')

import mayapyAdCl

myWin = mayapyAdCl.main()

Durch den Pfad, auf dem Sie .ui und .py setzen Importieren und ausführen.

Bemerkungen

QApplication

Der ursprüngliche Artikel ist der Inhalt, der in python.exe geworfen werden soll. Da wir jedoch daran denken, ihn hier auf Maya auszuführen, muss der Ort geändert werden, an dem die Instanz von "QApplication" verwendet wird.

Speziell…

app = QtGui.QApplication(sys.argv)
# Error: A QApplication instance already exists.
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
# RuntimeError: A QApplication instance already exists. # 

Weil ein solcher Fehler auftreten wird

app = QtGui.QApplication.instance()

Ich werde es so umschreiben. Löschen oder kommentieren Sie gleichzeitig sys.exit (app.exec_ ()) hier.

mayaMixin

Ich muss das erstellte Fenster zum Hauptfenster von Maya übergeordnet und untergeordnet haben Du wirst ein schüchternes Kind sein, das sich hinter dir versteckt.

In der Vergangenheit war es üblich, Shiboken zu verwenden, um einen Zeiger zu nehmen. Wenn Sie mayaMixin verwenden, können Sie die Beschreibung weglassen.

from maya.app.general.mayaMixin import MayaQWidgetBaseMixin

Importieren

class GUI(MayaQWidgetBaseMixin, QtGui.QMainWindow):

Erben.

Referenz: http://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__files_GUID_66ADA1FF_3E0F_469C_84C7_74CEB36D42EC_htm

Hauptrendite

Ich füge der Hauptfunktion return ui hinzu. Wenn Sie dies erhalten, können Sie beim Erstellen der Benutzeroberfläche ein Debugging durchführen.

close

Fenster schließen Verwenden Sie die ursprüngliche Methode von QMainWindow.

Ich benutze es in den Funktionen setSignals und doIt_close. Mit dem gleichen Kleber wie andere UI-Elemente wie self.UI.tx_chbx Achten Sie darauf, nicht versehentlich "self.UI.close ()" zu schreiben.

abschließend

Es ist eine Ergänzung zur Wunderbarkeit des Originalartikels.

Ich hoffe es hilft jemandem. (Bitte lassen Sie mich wissen, wenn es etwas Seltsames gibt, wie zum Beispiel, dass es nicht funktioniert ...)

Als nächstes folgt der Artikel von mono_g ** "Mayas Materialkneten" **. http://qiita.com/mono-g/items/520f4967356456eb4cc5

Recommended Posts

[Ergänzung] [PySide] Spielen wir mit Qt Designer
Spielen wir mit der 4. Dimension der 4. Dimension
Spielen wir mit Amedas Daten - Teil 1
Spielen wir mit Amedas Daten - Teil 4
Spielen wir mit Amedas Daten - Teil 3
Spielen wir mit Amedas Daten - Teil 2
Lass uns mit Python mit Python spielen [Anfänger]
[Einführung in WordCloud] Spielen Sie mit Scraping ♬
Spiel mit dem Propheten
Python-Handspiel (Beginnen wir mit AtCoder?)
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen einer Lambda-Funktion
Spiele mit PyTorch
Spielen Sie mit 2016-Python
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Erstellen Sie mit Python + Qt (PySide) ein farbspezifisches Widget.
Spielen Sie mit CentOS 8
Spiel mit der Pyramide
Spiel mit Fathom
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Spielen wir mit JNetHack 3.6.2, das einfacher zu kompilieren ist!
[Piyopiyokai # 1] Lass uns mit Lambda spielen: Holen Sie sich einen Twitter-Account
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen eines Python-Skripts
Spiel mit Othello (Reversi)
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten