4

Summerfield の「Python と Qt を使用した高速 GUI プログラミング」。私は一般的に本が大好きです。最初の数章は、私がオンラインまたはその他の方法で見つけた最高の Python 入門書であり、例は多様で役に立ちます (完全ではありませんが、確かにパディングとリトレースがあります - はるかに直接的である可能性があります)。

私の問題は、それから悪い習慣を身につけているのではないかと感じていることです. 新しい属性を既存のオブジェクトに動的に割り当てる代わりに、作成者は「setData」関数、特別な MIMEData スロットなどを使用します。以下は、私が Stackoverflow で最初に尋ねた質問の 1 つからの良い例です。

PyQtウィジェットアイテムから「データ」を設定して取得しますか?

または、たとえば、ページ デザイナー アプリで:

def writeItemToStream(self, stream, item):
    if isinstance(item, QGraphicsTextItem):
        stream << QString("Text") << item.pos() \
               << item.matrix() << item.toPlainText() << item.font()
    elif isinstance(item, QGraphicsPixmapItem):
        stream << QString("Pixmap") << item.pos() \
               << item.matrix() << item.pixmap()
    elif isinstance(item, BoxItem):
        stream << QString("Box") << item.pos() \
               << item.matrix() << item.rect
        stream.writeInt16(item.style)

著者の C++/Qt のバックグラウンドが、彼の例を最適ではないものにしている可能性があると考えるのは正しいですか? それとも、彼の選択の多くを理解しようとし続ける必要がありますか?

4

1 に答える 1

3

PyQt4 は Qt へのバインドであることを覚えておく必要があります。API の互換性のために、一方で行われることの多くは、他方でも同じです。

明らかに、C++ は静的型付き言語であり、Python ではオブジェクトに属性を割り当てるだけで済みますが、それを setData 呼び出しなどと混同しないでください。通常、これらの呼び出しは、公開されていない内部メンバーを設定します。これは、バインディングの側面が理にかなっているところです。C++ オブジェクトが期待する相互作用を得るためには、通常、pyqt で同じ API を使用する必要があります。

非常に C++ に関連するものの 1 つの例は、QVariant です。これは、さまざまなタイプを表すことができるオブジェクトです。Python は通常この種のオブジェクトを必要としませんが、C++ は動的な型を 1 つのオブジェクトに保持します。たとえば、QSettings やモデル/ビュー コンポーネントを操作するときは、このオブジェクトを処理する必要があります。

その本は優れた学習ツールであり、悪い習慣を身につけようと考えないことをお勧めします. マークは、PyQt を理解するために何を教える必要があるかを知っています。一般的に Python を学習すると、これらの区別を簡単に行うことができるようになります。

于 2012-08-20T15:59:33.127 に答える