[Complément] [PySide] Jouons avec Qt Designer

Cet article qui est pris en charge dans l'étude de PySide (étude d'accompagnement QtDesigner)

** [PySide] Jouons avec QtDesigner ** @ * mtazmi-Lab * http://mtazmi-lab.blogspot.jp/2013/01/QtDesiner.html

Sur En réponse à l'interface utilisateur créée ici, j'aimerais écrire un script qui acquiert des informations et publie quelque chose.

Merci mtazmi, merci pour votre aide m (_ _) m

Avant d'accepter

Que voulez-vous dire? Cet article est un merveilleux article sur ** Créer une interface utilisateur avec QtDesigner ** Les articles précédents et suivants expliquent également des exemples utilisant PySide et QtDesigner.

Cependant, la partie opération n'a pas été préparée pour l'interface utilisateur elle-même qui apparaît dans l'article, donc Je voudrais écrire une petite histoire qui complète ce point tout en respectant MAX, J'ai pensé.

Supplément

Les articles avant et après sont ici. Veuillez vous réunir

[PySide] Jouons avec PySide http://mtazmi-lab.blogspot.jp/2012/12/pythonPySide01.html

[PySide] Prenons diverses valeurs de l'interface utilisateur http://mtazmi-lab.blogspot.jp/2013/01/pysidegetvalue.html

Le premier est relativement proche de cet itinéraire, Ce dernier est un scratch de PySide sans utiliser Qt Designer

Préparation de l'interface utilisateur

Créons une interface utilisateur selon l'article original. À propos, Qt Designer se trouve sous `` bin '' dans le dossier d'installation de Maya. ** designer.exe ** c'est ça.

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

Shinchoku 1 01.png

Shinchoku 2 02.png

J'étais capable de Enregistrez le fichier .ui dans un bon emplacement. Le nom du fichier est ici `` mayapyAdCl.ui ''.

Pièce mobile

Je vais faire une partie mobile.

Tout d'abord, voici le script de l'article

# -*- coding: utf-8 -*-
 
import os
import sys
 
from PySide import QtCore, QtGui
from PySide.QtUiTools import QUiLoader
 
CURRENT_PATH = os.path.dirname(__file__)
 
#----------------------------------------------------------------------------
##Classe pour créer une interface graphique
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)
 
#------------------------------------------------------------------------------ 
##Lancer l'interface graphique
def main():
    app = QtGui.QApplication(sys.argv)
    app.setStyle('plastique')    #← Précisez le style ici
    ui = GUI()
    ui.show()
    sys.exit(app.exec_())
 
 
if __name__ == '__main__':
    main()
 
#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------

Enregistrez-le au même endroit que le .ui précédent. Nommez-le `` mayapyAdCl.py ''.

Ajouter une pièce mobile

Reportez-vous à l'article précédent de l'article original, De plus, tout en consultant la documentation PySide, essayez ce qui suit.

# -*- 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__)

#----------------------------------------------------------------------------
##Classe pour créer une interface graphique
class GUI(MayaQWidgetBaseMixin, QtGui.QMainWindow):
 
    def __init__(self, parent=None):
        super(GUI, self).__init__(parent)
         
        #Chargement du fichier ui
        loader = QUiLoader()
        uiFilePath = os.path.join(CURRENT_PATH, 'mayapyAdCl.ui')
        self.UI = loader.load(uiFilePath)
        self.setCentralWidget(self.UI)
         
        #Spécifiez le titre de la fenêtre
        self.setWindowTitle(u'C'est un exemple d'interface utilisateur')
        #Spécifiez la taille de la fenêtre
        self.resize(256, 128)
         
        #Ajouter un signal à l'élément d'interface utilisateur
        self.setSignals()
 
    #----------------------------------------
    ##Enregistrement du signal
    # @param None
    # @return None
    def setSignals(self):
        #Comportement lorsque le bouton Appliquer est enfoncé
        self.UI.apply_btn.clicked.connect(self.doIt)
        #Lorsque vous appuyez sur le bouton Appliquer et Fermer(ry
        self.UI.applyClose_btn.clicked.connect(self.doIt_close)
        #bouton de fermeture(ry
        self.UI.close_btn.clicked.connect(self.close)

    ##Verrouiller une fois coché
    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)

    ##faire et puis fermer
    def doIt_close(self):
        self.doIt()
        self.close()



#------------------------------------------------------------------------------ 
##Lancer l'interface graphique
def main():
    app = QtGui.QApplication.instance()
    ui = GUI()
    ui.show()
    
    return ui
 
 
if __name__ == '__main__':
    main()
 
#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------

Un exemple est de savoir si une case est cochée et de verrouiller le canal si c'est le cas.

Courir

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

import mayapyAdCl

myWin = mayapyAdCl.main()

Par le chemin où vous mettez .ui et .py Importez et exécutez.

Remarques

QApplication

L'article original est le contenu à lancer sur python.exe, mais puisque nous envisageons de l'exécuter sur Maya ici, il est nécessaire de changer l'endroit où l'instance de QApplication est prise.

En particulier…

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. # 

Parce qu'une telle erreur se produira

app = QtGui.QApplication.instance()

Je vais le réécrire comme ça. En même temps, supprimez ou commentez `` sys.exit (app.exec_ ()) '' ici.

mayaMixin

Je dois parent et enfant la fenêtre créée à la fenêtre principale de Maya Vous serez un enfant timide qui se cache derrière vous.

Dans le passé, il était d'usage d'utiliser des shiboken pour prendre un pointeur. Si vous utilisez mayaMixin, vous pouvez omettre la description.

from maya.app.general.mayaMixin import MayaQWidgetBaseMixin

Importer

class GUI(MayaQWidgetBaseMixin, QtGui.QMainWindow):

Hériter.

référence: http://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__files_GUID_66ADA1FF_3E0F_469C_84C7_74CEB36D42EC_htm

retour principal

J'ajoute `` return ui '' à la fonction principale. Si vous recevez cela, vous pourrez déboguer lors de la création de l'interface utilisateur.

close

Pour fermer la fenêtre Utilisez la méthode originale de QMainWindow.

Je l'utilise dans les fonctions setSignals et doIt_close, Avec la même colle que les autres éléments de l'interface utilisateur tels que self.UI.tx_chbx Faites attention de ne pas écrire par inadvertance `` self.UI.close () ''.

en conclusion

C'est un complément à la beauté de l'article original.

J'espère que cela aide quelqu'un. (S'il vous plaît laissez-moi savoir s'il y a quelque chose d'étrange comme ne pas fonctionner ...)

Vient ensuite l'article de mono_g ** "Maya's Material Kneading" **. http://qiita.com/mono-g/items/520f4967356456eb4cc5

Recommended Posts

[Complément] [PySide] Jouons avec Qt Designer
Jouons avec la 4e dimension 4e
Jouons avec les données Amedas - Partie 1
Jouons avec les données Amedas - Partie 4
Jouons avec les données Amedas - Partie 3
Jouons avec les données Amedas - Partie 2
Jouons avec Excel avec Python [Débutant]
[Introduction à WordCloud] Jouez avec le scraping ♬
Jouez avec Prophet
Jeu à la main en Python (commençons avec AtCoder?)
[Piyopiyokai # 1] Jouons avec Lambda: création d'une fonction Lambda
Jouez avec PyTorch
Jouez avec 2016-Python
Créer une barre de couleurs avec Python + Qt (PySide)
Créer un widget avec une couleur spécifiée avec Python + Qt (PySide)
Jouez avec CentOS 8
Jouez avec Pyramid
Jouez avec Fathom
[Jouons avec Python] Créer un livre de comptes de ménage
Jouons avec JNetHack 3.6.2 qui est plus facile à compiler!
[Piyopiyokai # 1] Jouons avec Lambda: créez un compte Twitter
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python
Jouer avec Othello (Reversi)
[Jouons avec Python] Traitement d'image en monochrome et points