Python如何与wxPython、PyQt、PySide或Tkinter解释?

3
我很好奇,已经读了一个小时关于使用Python开发GUI的内容。在阅读了wxPython、PyQt、Nokia的Python绑定Qt以及Tkinter的文档后,我有一个问题。
当我使用Python创建控制台应用程序时,它使用嵌入式Python解释器运行(我认为通常情况下是CPython)。
所以我想知道,“小部件工具包”的情况是什么?
- Python代码如何执行,由谁解释或执行? - 我的Python代码的哪个部分使用Python解释器进行解释? - 还是Python代码被词法分析,然后由小部件工具包解析和执行(或在构建期间编译)?
与Python应用程序(稍微容易理解一些)使用Python解释器的解释相比,我期待着了解背景中发生的事情。
谢谢。
PS. 对于任何认为这个问题应该关闭的天才;很多人都想知道外部库和系统的内部情况,特别是那些看起来不那么简单的情况。目前SE上没有任何问题解释这一点。

1
你所说的“嵌入式”,是指系统捆绑的Python吗? - jdi
是和不是。基本上我的意思是系统中已经存在的解释器是全系统可用的。我使用这个词来避免与这些小部件工具包可能为它们的执行机制而安装的解释器混淆。 - Phil
3
没有魔法发生。GUI工具包被链接为解释器的库。 - Fred Foo
@larsmans,我在SO上阅读帖子时看到了一些评论和抱怨,称无法与小部件共享纯Python代码结果(在Qt绑定的情况下)。如果所有代码库都简单地链接到解释器,这不应该是问题。我不明白这些通常是以C/C++为主要开发语言的工具包如何与Python链接;这就是我提出问题的原因。 - Phil
@Phil:它们作为动态库链接,使用dlopen或在Windows上的替代品。可能某些工具包在Windows上安装了自己的Python副本,但那只是一个普通的Python解释器,就像您在C:\Python27(或任何其他位置)安装的那个一样。 - Fred Foo
1个回答

8

这只是一个关于“GUI工具包”的概括性高级说明...

假设您决定使用Qt框架。该框架是用C++编写的。有两个不同的Python绑定可以使用,允许使用相同API针对C++版本编写Python GUI应用程序。

Python绑定提供了对调用C++代码的包装。例如,PyQt4使用sip,而PySide使用shiboken。这些只是语言封装工具,它们接受有关如何映射C++对象及其预期Python接口的规范。

好的,那么你开始使用PyQt...你编写的所有代码都必须通过Python解释器。其中一些可能是纯Python的,而另一些将调用C++库来创建诸如小部件之类的东西。在Qt中,将与Python实例副本关联一个C++指针。

然后是C++层与您平台的窗口管理器进行通信,将平台无关的API调用转换为某些平台特定的内容,例如确切地绘制按钮或菜单。

无论您创建控制台还是基于GUI的Python应用程序,所有内容都将通过Python解释器传递以解释Python代码。必须有某些内容来解释Python语言。


你好 @jdi,这是一个简单、清晰且优秀的解释。谢谢!所以如果我理解正确,小部件的编译C/C++代码会创建绑定到Python,调用它们的函数,进而绘制GUI并启用交互。是这样吗? - Phil
几乎。C/C++已经编译并且是独立的。你可以仅构建Qt并使用C++编写Qt应用程序。然后,你可以使用类似sip的工具编写如何映射C++和Python对象的描述。sip会生成Python绑定,通过sip层处理所有调用。 - jdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接