🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

822閲覧

PythonとQTdesignerを使用したツール作成の際のリスト化について教えてください。

ot2k

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/06 17:18

編集2021/02/07 08:28

MAYAのツールをPythonとQTdesignerで作成しようとしていました。
テキストボックスに打ったものがリスト化され削除できるツールを作成しようとしていたのですが、上手くリスト化されません。

上の写真のKOMEの部分をリスト化したいのですが上手くいかず、printした結果が[]となってしまいます。
選択する分を入れてみたりしたのですがどうも改善しません。教えて頂けると幸いです。

---ソースコード---
from future import absolute_import, division, print_function, unicode_literals

import os
import os.path
import maya.cmds

from maya import cmds
from maya import OpenMayaUI as omui
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin, MayaQWidgetDockableMixin
from PySide2 import QtCore, QtGui, QtWidgets, QtUiTools
from shiboken2 import wrapInstance

def this_dir(*args):
"""このスクリプトと同じフォルダからの相対パスをフルパスに変換して返す"""
dir_path = os.path.dirname(file.decode(u"cp932"))
return os.path.join(dir_path, *args)

class DeleterUI(MayaQWidgetBaseMixin, QtWidgets.QWidget):
def init(self, *args, **kwargs):

super(DeleterUI, self).init(*args, **kwargs)

self.setWindowTitle("Deleter") ui_filename = this_dir("QT_lesson15.ui") # uiファイル名を指定する self.ui = self.initUI(ui_filename) self.vertical_layout = QtWidgets.QVBoxLayout(self) self.vertical_layout.addWidget(self.ui) self.ui.button.clicked.connect(self.on_click_push_button) def initUI(self, ui_filename): ui_loader = QtUiTools.QUiLoader() ui_file = QtCore.QFile(ui_filename) ui_file.open(QtCore.QFile.ReadOnly) ui = ui_loader.load(ui_file, parentWidget=self) ui_file.close() return ui def on_click_push_button(self, *args): print("on click push button") KOME = self.ui.text.toPlainText() lll = cmds.ls('KOME*') print (lll)

def main():
win = DeleterUI()
win.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teamikl

2021/02/07 06:16 編集

ソースコードのレイアウトが崩れてるので修正お願いします。 ---- python3.6 以降なら f"{KOME}*" で変数の内容を反映した文字列になりますが、 python2.x 互換のコードが見られるので、組み込みのpython環境で 特定バージョンということはありますか? - KOME: テキスト欄に入力する文字列 - cmds.ls(...) で実行したい文字列 - lll: 期待する結果の値 は、それぞれ何でしょうか。
ot2k

2021/02/07 08:33

KOMEで得た文字列を使用し、MAYAでその文字列を含むマテリアルを検索し、それを削除するツールを作成しようとしています。 I:テキスト欄に入力する文字列はMAYA内のマテリアル名(Cubeなど)です。 II:cmd.lsではKOMEの内容をリスト化する事でMAYA内で検索できるようにしようとしています。 III:*(入力した文字列)でMAYA内で検索し、そのマテリアルを削除できるようにしようとしています。
ot2k

2021/02/07 08:40

頂いた回答を参考に何とか*(入力した文字列)をprintする事には成功しているのですが、そこから検索し、削除するまでが行き詰っております。
ot2k

2021/02/07 08:40

KOME = self.ui.text.toPlainText().split("\n") lll = "*{0}".format(KOME) print (lll) この形で表示まではできました。ありがとうございます。
teamikl

2021/02/07 08:54

不明瞭な点で尋ねたかった事は、KOME の内容を複数の文字列として扱いという事ですか? 例: AAA BBB CCC と入力が3行あれば、["AAA", "BBB", "CCC"] それぞれを検索し削除したい? KOME をリストとして扱いたいかどうかという点。今のコメントのコードでは、 上記の様な入力をした場合、"*['AAA', 'BBB', 'CCC']" の様な文字列になってしまいます。 Pythonのリストの表示表現なので、 恐らく cmds.ls で検索できるような表現にはなってないはずです。 ---- 検索&削除~そこから先は maya での領域ですね。 試せる環境にないので、詳しくは解りませんが、cmds.delete を使うのかな。 まずは、先に cmds.ls で目的のオブジェクトの検索を目指しましょう。
guest

回答1

0

ベストアンサー

KOMEの部分をリスト化したい

テキスト欄に入力した内容をリストで扱いたいということですか?

質問の部分にだけ答えるなら、

python

1KOME = self.ui.text.toPlainText().split("\n") 2 3# printで表示して確認 4print(KOME)

リスト化する際の区切り文字は任意の文字に合わせてください。

但し、その次の行の cmds.ls('KOME*') は、
入力内容に関わらず "KOME*" という文字列を cmds.ls へ渡してます。
(変数KOMEの内容が反映されてません)恐らく目的の結果は得られないと思います。

やりたいことが、字面通り
KOMEの内容をリストとしてcmds.ls へ渡したいのか、
KOMEの内容を cmds.ls へ渡して、結果のリストを得たいのかで変わってきます。


多分、文字列処理の問題だと思うので

>>> KOME = "AAA" # python3.6以降 >>> print(f"{KOME}*") AAA* # python 2.x/3.x >>> print("{}*".format(KOME)) AAA* # python 2.x/3.x 古い方法 >>> print("%s*" % KOME) AAA* # NG (現状のコード) >>> print("KOME*") KOME*

質問の「リスト化」が事前にKOMEをリスト化するのかが不明瞭ですが、
とりあえず、その次の行では入力した文字を cmds.ls へ渡したいのだと思います。
print に置き換えて確認してみてください。

書式整形の方法については、
改善されてきた経緯により、他にも何通りか方法がありますが、
新規のコードで書くときは、可能な限り上の方法を使ってください。

詳しくは、チュートリアルの 7.1. 出力を見やすくフォーマットする辺りを参照。

投稿2021/02/07 06:35

編集2021/02/07 08:43
teamikl

総合スコア8738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問