从书中学习PyQt。Python有太多C++风格的代码?

2024-09-24 22:26:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Setting and getting "data" from PyQt widget items?

或者,例如,在页面设计器应用程序中:

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++背景知识可以使他的例子不够理想吗?还是我应该继续努力理解他的很多选择?在


Tags: posstream编程地方gui作者itemqt
1条回答
网友
1楼 · 发布于 2024-09-24 22:26:57

你必须记住PyQt4是Qt的绑定。为了API的兼容性,其中一个做的很多事情,在另一个中也是一样的。在

显然C++是一种静态类型语言,Python允许你简单地将属性分配给对象,但不要把它与SETDATA调用混淆。通常这些调用设置不向您公开的内部成员。这就是绑定方面有意义的地方。为了使C++对象获得它们所期望的交互,通常需要在PyQT

中使用相同的API。 一个非常C++相关的例子是q-变体。它是一个可以表示许多不同类型的对象。Python通常不需要这种对象,但是C++将在一个对象中保存动态类型。在使用例如QSettings或模型/视图组件时,必须处理此对象。在

那本书是一个很好的学习工具,我建议你不要考虑养成坏习惯。马克知道为了理解PyQt需要教什么。当您一般地学习python时,您将能够很容易地做出这些区分。在

相关问题 更多 >