4

Summerfield 的“使用 Python 和 Qt 进行快速 GUI 编程”。总的来说,我喜欢这本书。前几章是我在网上或其他地方找到的最好的 Python 入门书,示例多种多样且很有帮助(虽然并不完美,肯定有一些填充和追溯——它可能更直接)。

我的问题是我觉得我可能会从中养成坏习惯。作者不只是动态地为现有对象分配新属性,而是使用“setData”函数、特殊的 MIMEData 插槽等等。这是我在 Stackoverflow 上提出的第一个问题的一个很好的例子:

从 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++ 非常相关的一个例子是 QVariant。它是一个可以表示许多不同类型的对象。Python 通常不需要这种对象,但 C++ 会在一个对象中保存动态类型。当您使用 QSettings 或模型/视图组件时,您将不得不处理此对象。

那本书是一本极好的学习工具,我建议不要考虑养成坏习惯。Mark 知道为了理解 PyQt 需要教什么。当您一般学习 python 时,您将能够轻松地进行这些区分。

于 2012-08-20T15:59:33.127 回答