私はあなたが尋ねた質問への回答をすでに投稿しました。new.instancemethod
しかし、問題を解決するために理解する必要があるというレベルまで降りる必要はありませんでした。起こった唯一の理由は、あなたが間違った質問をしたからです。質問すべき内容とその理由を見てみましょう。
PySide.QtGui では、リスト ウィジェットのアイテムにフォントと色を設定するメソッドが必要ですが、そうではないようです。
これはあなたが本当に欲しいものです。これを行う簡単な方法があるかもしれません。もしそうなら、それはあなたが望む答えです。また、ここから始めることで、「本当は何をしたいの?」というコメントを避けることができます。または、「これがあなたがやろうとしていることに対して適切であるとは思えません」(多くの場合、反対票を投じるか、さらに重要なことに、潜在的な回答者があなたの質問を無視するだけです)。
もちろん、メソッドにする代わりに、QListWidgetItem を受け取る関数を作成してその関数を呼び出すこともできますが、_ _.
うまくいかない理由があると思います。でもなかなかいいのが思いつきません。コードのどの行がこれを言ったとしても:
item.setColor(color)
代わりに次のように言います。
setItemColor(item, color)
とてもシンプルです。
たとえば、項目がバインドされた色設定デリゲートを渡す必要がある場合でも、関数を使用するとメソッドを使用する場合と同じくらい簡単です。これの代わりに:
delegate = item.setColor
これは:
delegate = lambda color: setItemColor(item, color)
したがって、これをメソッドにする必要がある正当な理由がある場合は、それを説明する必要があります。運が良ければ、あなたが間違っていたことがわかります。そして、あなたがしようとしていたことよりも、あなたがやりたいことをするためのはるかに簡単な方法があります。
これを行う明白な方法は、PySide でクラスまたはファクトリ関数を指定できるようにすることです。これにより、QListWidgetItem サブクラスを記述でき、これまでに扱ったすべてのリスト項目がそのサブクラスのインスタンスになります。しかし、私はそれを行う方法を見つけることができません。
これは、PySide の機能であるべきもののようです。その場合は、知りたいと思うでしょう。そうでない場合、そしてあなたもコメント者も回答者も、それが悪い設計である、または実装が難しいという正当な理由を思いつかない場合は、機能要求を提出する必要があります。それは次のバージョンに含まれる可能性があります. (これは、現在のバージョンに対して来週コードをリリースする必要がある場合に役立つというわけではありませんが、それでもやる価値はあります。)
それを行う方法が見つからなかったので、setColor
メソッドをQListWidgetItem
クラスに追加する方法を見つけようとしましたが、何も思いつきませんでした。
モンキー パッチ クラスは非常に単純です。
QListWidgetItem.setColor = setItemColor
これができることを知らなかったとしても、それは問題ありません。それがあなたがやろうとしていることだと人々が知っていれば、彼らは最初にこれを提案するでしょう。(わかりました、おそらく多くの Python プログラマーはモンキー パッチについてよく知っているわけではありませんが、記述子や について知っている人の数よりもはるかに多いのnew.instancemethod
です。)より良い答え。
これを知っていたとしても、一部の拡張モジュールではそれができません。試して失敗した場合は、代わりに何がうまくいかなかったかを説明してください。
PySide では、メソッドをクラスに追加できません。モンキーパッチをやってみると、_ _.
うまくいかなかった理由を誰かが知っているかもしれません。そうでない場合、少なくとも彼らはあなたが試みたことを知っています.
したがって、すべてのインスタンスに追加する必要があります。
モンキー パッチのインスタンスは次のようになります。
myListWidgetItem.setColor = setItemColor
繰り返しになりますが、迅速な回答とより良い回答が得られます。
しかし、おそらくあなたはそれを知っていて、試してみましたが、うまくいきませんでした:
PySide では、各インスタンスにメソッドを追加することもできません。やってみると、_ _.
そこで__class__
、PyQt4 では機能するが、PySide では_ _.
これは PySide の仕組みに過ぎないため、おそらく何の役にも立たないでしょう。しかし、あなたが試したことは言及する価値があります。
そこで、そのカスタム サブクラスを作成し、そのメソッドをコピーすることにしました。
そして、ここまでずっと、元の質問に入力したすべてのものを配置する場所です. 問題を解決するために本当に必要な場合は、情報がそこにあります。しかし、簡単な解決策があれば、仕組みを推測しているだけの人から、混乱した答えがたくさん返ってくることはありませんnew.instancemethod
。