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
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é.
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
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
Shinchoku 2
J'étais capable de Enregistrez le fichier .ui dans un bon emplacement. Le nom du fichier est ici `` mayapyAdCl.ui ''.
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 ''.
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.
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.
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
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 () ''.
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