2017年4月30日日曜日

【モーション記事じゃない】Python 辞書の作成時の登録順番を維持

あまぐりです。

最近作業中階層が非常に深かったり、
飛びまくってるところへ度々アクセスすることが多いんですね。

ので、エクスプローラーさんと行き来することが多いんですが、
案件変わるたびに入れ替えたりお気に入りフォルダやショートカットが
多大なことになってきて古いの消したりとかしてるんですが

普通にフォルダ名かぶってることがあったりするわけです
そうすると

ProjectA
ProjectA(2)

とかかってにつくわけですわお気に入り
お気に入りの方名前かえりゃいいけど
数が多くなってくると面倒くさい

ってことでMaya用ファイルブラウザが欲しかったからPysideで作って、
(Pysideで作ったのはmodelやViewの概念が使いやすかったのと、
あとウインドウのアイコン変えたかったから)
ブックマークも独自のを組んだわけですわ
csvから読み込んで辞書で

ここで問題が発生する

辞書は中の要素の順番は保証されない

保証されないんだって
だから取り出す時そのままitemを取り出すと順番が勝手に変わりやがる

やめれけろ

辞書内にlineread時のインデックス残しとくか・・・・?
とも思ったけどそれも違う

辞書内がややこしくなる

ってことで見つけたのが
from collections import OrderedDict
TestDict = OrderedDict()
あとは元々辞書宣言していたのを上みたいにしとけばいいだけ
これ辞書を作成したときの順番を維持するやつみたい

collectionsさんいつもお世話になってます
あんた本当優秀だな

import collections
TestDict = collections.OrderedDict()
from ~ が嫌いな人はこうだぜ

from collections import *
これは勘弁な

いいね

ファイルブラウザへの要望で一つ、
ブックマークの並び順を変えさせてほしいってのもきたけど、
これならなんとかなりそう。


コンテンツブラウザは重い・・・


2017年4月28日金曜日

Pyside2 csvから日本語の文字列を文字化け回避

あまぐりです。

最近社内用のデータベースありきのMaya用ブラウザー作成してる時に、
pyside2ではpysideだったころの日本語対応がうごかなくて、
C++のほうのリファレンスで調べて出てきたのも解決にはならなかったので、
どうしたもんかと思ってたら・・・

for key, value in self.ProjData.items():
if '#' in key or key == '':
continue
if asciicheck.Is_Ascii(key) == None:
key = key.decode('cp932')
m_MenuAction = QtWidgets.QAction(key, self)

まぁようは普通にデコードすりゃいけたんですが、
魔法の言葉もいるのかなと

pysideでは日本語を受け取った時これいれときゃよかったのを
QtCore.QTextCodec.setCodecForCStrings( QtCore.QTextCodec.codecForLocale() )

pyside2ではこのようにってのを Qt5ではってんで見かけた
QtCore.QTextCodec.setCodecForLocale( QtCore.QTextCodec.codecForName('utf-8') )

のこうした。

が、これいれなくても普通にデコードでよかった。
魔法の言葉いらんくなったのかな。

あとpyside2ではQtGuiのWidget系が全部 pyside2.QtWidgetsに映ってるようですが、
modelやQIconとかはQtGuiのままようだわ。

紛らわしい。

早く公式のドキュメントこないのかーい。


【モーション記事じゃない】Python 辞書の作成時の登録順番を維持

あまぐりです。 最近作業中階層が非常に深かったり、 飛びまくってるところへ度々アクセスすることが多いんですね。 ので、エクスプローラーさんと行き来することが多いんですが、 案件変わるたびに入れ替えたりお気に入りフォルダやショートカットが 多大なことになってきて古いの...