This article is taken care of by studying PySide (studying QtDesigner accompanying it)
** [PySide] Let's play with QtDesigner ** @ * mtazmi-Lab * http://mtazmi-lab.blogspot.jp/2013/01/QtDesiner.html
About In response to the UI created here, I would like to write a script that acquires information and publishes something.
Thank you mtazmi, thank you for your help m (_ _) m
What do you mean? This article is a wonderful article about ** Creating UI with QtDesigner **. The articles before and after that also explain examples using PySide and Qt Designer.
However, the UI itself that appears in the article did not have a working part, so I would like to write a small story that complements that point while respecting MAX, I thought.
The articles before and after are here. Please come together
[PySide] Let's play with PySide http://mtazmi-lab.blogspot.jp/2012/12/pythonPySide01.html
[PySide] Let's take various values from the UI http://mtazmi-lab.blogspot.jp/2013/01/pysidegetvalue.html
The former is relatively close to this line, The latter is a scratch by PySide without using Qt Designer
Let's create a UI according to the original article.
By the way, Qt Designer is under bin
in the Maya installation folder.
** designer.exe ** is that.
C:\Program Files\Autodesk\Maya{ver}\bin\designer.exe
Shinchoku 1
Shinchoku 2
I was able to
Save the .ui file in a good location.
The file name is mayapyAdCl.ui
here.
I will make a moving part.
First of all, here is the script of the article
# -*- coding: utf-8 -*-
import os
import sys
from PySide import QtCore, QtGui
from PySide.QtUiTools import QUiLoader
CURRENT_PATH = os.path.dirname(__file__)
#----------------------------------------------------------------------------
##Class to make GUI
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)
#------------------------------------------------------------------------------
##GUI launch
def main():
app = QtGui.QApplication(sys.argv)
app.setStyle('plastique') #← Specify the style here
ui = GUI()
ui.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------
Save this in the same place as the previous .ui.
Name it mayapyAdCl.py
.
Refer to the previous article of the original article, Also, while looking at the PySide documentation, try the following.
# -*- 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__)
#----------------------------------------------------------------------------
##Class to make GUI
class GUI(MayaQWidgetBaseMixin, QtGui.QMainWindow):
def __init__(self, parent=None):
super(GUI, self).__init__(parent)
#ui file loading
loader = QUiLoader()
uiFilePath = os.path.join(CURRENT_PATH, 'mayapyAdCl.ui')
self.UI = loader.load(uiFilePath)
self.setCentralWidget(self.UI)
#Specify the title of the window
self.setWindowTitle(u'It's a UI sample')
#Specify the size of the window
self.resize(256, 128)
#Add signal to UI element
self.setSignals()
#----------------------------------------
##Signal registration
# @param None
# @return None
def setSignals(self):
#Behavior when the apply button is pressed
self.UI.apply_btn.clicked.connect(self.doIt)
#When you press the apply and close button(ry
self.UI.applyClose_btn.clicked.connect(self.doIt_close)
#close button(ry
self.UI.close_btn.clicked.connect(self.close)
##Lock when checked
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 and then close
def doIt_close(self):
self.doIt()
self.close()
#------------------------------------------------------------------------------
##GUI launch
def main():
app = QtGui.QApplication.instance()
ui = GUI()
ui.show()
return ui
if __name__ == '__main__':
main()
#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------
An example is to get if a checkbox is in and lock the channel if it is.
import sys
sys.path.append('path/to/your/scripts')
import mayapyAdCl
myWin = mayapyAdCl.main()
Through the path where you put the .ui and .py Import and execute.
QApplication
The original article is the content to be thrown to python.exe, but since we are thinking of executing it on Maya here, it is necessary to change the place where the instance of QApplication
is taken.
In particular…
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. #
Because such an error will occur
app = QtGui.QApplication.instance()
I will rewrite it like this.
At the same time, delete or comment out sys.exit (app.exec_ ())
here.
mayaMixin
I have to parent and child the created window to the main window of Maya You will be a shy child who hides behind you.
In the past, it was customary to use shiboken to take a pointer, but If you use mayaMixin, you can omit the description.
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
Import
class GUI(MayaQWidgetBaseMixin, QtGui.QMainWindow):
Inherit.
reference: http://help.autodesk.com/view/MAYAUL/2017/JPN/?guid=__files_GUID_66ADA1FF_3E0F_469C_84C7_74CEB36D42EC_htm
I'm adding return ui
to the main function.
If you receive this, you will be able to debug while creating the UI.
close
To close the window Use the method that comes with QMainWindow.
I use it in the setSignals and doIt_close functions,
With the same glue as other UI elements such as self.UI.tx_chbx
Be careful not to inadvertently write self.UI.close ()
.
It is a supplement to the wonderfulness of the original article.
I hope it helps someone. (Please let me know if there is something strange such as not working ...)
Next is mono_g's article ** "Kneading Maya Materials" **. http://qiita.com/mono-g/items/520f4967356456eb4cc5
Recommended Posts