#この記事の目的
自作ツールの中身を一つ一つ確認しながら理解を深め、今後のツール開発に役立てます。
下記シリーズの続きです。1,2と重複する部分は省略します。
#ツール概要
シーンに保存されているプラグイン読み込み情報を削除します。
妙にファイル読み込みに時間がかかる場合試してみてください。
プラグイン情報をリストしチェックを入れた情報のみ削除します。
#コード全文
# -*- coding: utf-8 -*-
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
from PySide2 import QtWidgets, QtCore, QtGui
from maya import cmds
class Widget(QtWidgets.QWidget):
def __init__(self):
super(Widget, self).__init__()
layout = QtWidgets.QGridLayout(self)
label = QtWidgets.QLabel(
u'不明なプラグインのリストです。\n'\
u'チェックを入れたプラグインを削除します。')
layout.addWidget(label, 0, 0)
treeView = TreeView()
layout.addWidget(treeView, 1, 0, 1, 2)
self.standardItemModel = StandardItemModel()
treeView.setModel(self.standardItemModel)
button = QtWidgets.QPushButton('Refresh')
button.clicked.connect(self.refresh)
layout.addWidget(button, 2, 0)
button = QtWidgets.QPushButton('Remove')
# ボタンのバックグラウンドカラーを変更
button.setStyleSheet("background-color: red")
button.clicked.connect(self.remove)
layout.addWidget(button, 2, 1)
self.refresh()
# Refreshボタンの動作
def refresh(self):
self.standardItemModel.removeRows(0, self.standardItemModel.rowCount())
# unknownPluginをリスト
unknownPluginList = cmds.unknownPlugin(q=True,list=True)
# unknownPluginがなければFalseを返す
if not unknownPluginList:
return False
# アイテムにunknownPluginを追加
for name in unknownPluginList:
self.standardItemModel.appendItem(name)
return True
# Removeボタンの動作
def remove(self):
# rowカウントを取得
count = self.standardItemModel.rowCount()
# rowカウント分繰り返す
for num in range(count):
# チェック状態と名前を取得
(check,name) = self.standardItemModel.rowData(num)
# チェックされていればunknownPluginを消す
if check:
cmds.unknownPlugin(name,remove=True)
print (u'deleted %s\n'%(name)),
# リスト内容を更新
self.refresh()
class TreeView(QtWidgets.QTreeView):
def __init__(self):
super(TreeView, self).__init__()
self.setSelectionMode(QtWidgets.QTreeView.ExtendedSelection)
self.setAlternatingRowColors(True)
# ソートできるように変更
self.setSortingEnabled(True)
class StandardItemModel(QtGui.QStandardItemModel):
def __init__(self):
super(StandardItemModel, self).__init__(0, 1)
self.setHeaderData(0, QtCore.Qt.Horizontal, 'Plugin Name')
def appendItem(self, name):
standardItem = QtGui.QStandardItem()
standardItem.setText(str(name))
standardItem.setEditable(False)
# チェック項目を追加
standardItem.setCheckable(True)
# チェック状態にする
standardItem.setCheckState(QtCore.Qt.Checked)
self.appendRow([standardItem])
def rowData(self, index):
check = self.item(index, 0).checkState()
name = self.item(index, 0).text()
return (check,name)
class MainWindow(MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle('List Unknown Plugins')
self.resize(430, 260)
widget = Widget()
self.setCentralWidget(widget)
def main():
window = MainWindow()
window.show()
if __name__ == "__main__":
main()
#詳細をみていく
###プログラム途中の改行
label = QtWidgets.QLabel(
u'不明なプラグインのリストです。\n'\
u'チェックを入れたプラグインを削除します。')
長いプログラムを改行する場合は'
で閉じ、最後に\
を入れる。次に行の開始にはu
をつける。
###ボタンの色を変える
# ボタンのバックグラウンドカラーを変更
button.setStyleSheet("background-color: red")
ボタンの色を赤に変更。他にも枠を変えたり色々できる模様。
今回は消す動作の注意喚起の意味も込めて赤に設定。
###Removeボタンの動作
# Removeボタンの動作
def remove(self):
# rowカウントを取得
count = self.standardItemModel.rowCount()
# rowカウント分繰り返す
for num in range(count):
# チェック状態と名前を取得
(check,name) = self.standardItemModel.rowData(num)
# チェックされていればunknownPluginを消す
if check:
cmds.unknownPlugin(name,remove=True)
print (u'deleted %s\n'%(name)),
# リスト内容を更新
self.refresh()
rowの数を取得し、range
を使い、カウントアップ処理します。
countが5の場合、range(count)
は0,1,2,3,4
となり、各row番号からcheck,name
を取得します。
checkがTrueならプラグイン情報を削除し、プリントします。
一通り処理したらself.refresh
でunknownPluginを再取得、リスト内容を更新します。
###アイテムにチェック項目を追加する
# チェック項目を追加
standardItem.setCheckable(True)
# チェック状態にする
standardItem.setCheckState(QtCore.Qt.Checked)
アイテムにチェック項目を追加して、チェックできるようにします。
QStandardItemModel
はアイテムごとにチェックボックスを追加できたり便利ですね。
#おわりに
今回は下記で作成したスクリプトの流用、一部改変で作成しました。
このようにPySideでUIを作っておけば中身は一部変更のみで様々なスクリプトが作れるようになります。
MayaでPythonスクリプトを作る際は、ぜひPySideでUIを作成してみてください。