外观
wxPython是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的,所以在GUI中编写按钮小部件的代码时,不会看到类似于另一个操作系统的东西。
PyQt也是使用C++编写的,它基于著名的Qt工具包。与wxPython不同的是,它不使用native
如果您使用KDE,可以使用其他PyKDE库来弥补原始PyQt与Linux和BSD之间Plasma desktop外观之间的差距,但这增加了新的依赖关系。
跨平台
PyQt正在努力的消除跨平台差异,允许Python本身需要的常见调整。PyQt可以避免大多数跨平台问题,所以在不同的操作系统中,GUI代码基本都可以保持不变。
安装
在所有平台上安装Qt与安装任何其他应用程序一样简单, 给用户一个下载的链接,然后安装下载的软件包即可使用。
在Linux,BSD和Ilumos中,安装程序通常由经销商的软件包管理员为用户编写。
部件和功能
PyQt具有灵活性的优点。 您可以在运行时重新排列,浮动,关闭和还原Qt面板,为每个应用程序提供高度可配置的以可用性为中心的界面。
只要您使用正确的小部件,就可以为用户提供很多友好的功能,而不必自己去重新思考花哨的技巧。
总体来说,wxPython毕竟只是wxWidgets的前端,所以如果你真的需要一个功能,你可以用C ++实现它,然后在wxPython中使用它。与PyQt相比,wxPython的学习曲线更加陡峭一些。
GUI应用程序由许多较小的视觉元素组成,通常称为“小部件”。 为了使GUI应用程序顺利运行,小部件必须彼此通信,例如,用于显示图像的窗格可以知道用户选择了哪个缩略图。大多数GUI工具包,包括wxPython,都可以处理和“callback”的内部通信。 回调是指向某段代码(“函数”)的指针。如果您想要点击某个按钮小部件时发生某些事情,那么你就要为这个发生的操作编写函数,当点击按钮时,触发函数,发生操作。
另一方面,Qt以信号/槽机制而闻名。如果您将wxPython的内部通信网络比喻为旧式电话交换机,那么PyQt的通信则可以视为网状网络。
Qt使用了信号和槽来代替回调函数。当一个特定的事件发生时,信号会被发送出去。Qt的窗体部件(widget)拥有众多预先定义好的信号,当然,我们也可以创建窗体部件(widget)的子类来为它们添加我们需要的自定义信号。槽,则是对一个特定的信号进行的反馈。Qt的窗体部件(widget)同样拥有众多预先定义好的槽,但是通常的做法是,创建窗体部件(widget)的子类并添加自定义槽,以便对感兴趣的信号进行处理。
所有从QObject或者它的一个子类(比如:QWidget)继承的类都可以使用号与槽。对象中以这种方式通信:一个对象的状态发生了改变并发送信号,关心这个改变的另一对像接收到这个信号。发送信号的对象并不知道也不感兴趣什么对象接收它所发出的信号,这是真正的信息封装,保证了对象能被当作软件组件来使用。
信号可以与槽进行多对多的连接。就这样,信号与插槽建立了强大的组件编程机制。
编写一个GUI应用程序,首先要做的就是设计布局,以便将所有窗口小部件都合适的布局在应用程序窗口中。和设计网页一样,你可以调整应用程序的大小,甚至可以将其设置为固定大小。
这里大多数的困惑都集中在基础级的GUI元素中。 例如,如果您正在编写应用程序,您是否能从QMainWindow或QWidget开始构建您的父窗口?
nerror="javascript:errorimg.call(this);">
▲QMainWindow
nerror="javascript:errorimg.call(this);">
下图是使用wx.frame创建一个空的窗口:
将其他小部件放在wx.frame窗口中,然后构建GUI应用程序。 例如,wx.Panel小部件类似于具有绝对大小约束的HTML中的div,因此您可以使用它在主窗口中创建面板。
nerror="javascript:errorimg.call(this);">
▲WxPython框架
nerror="javascript:errorimg.call(this);">
PyQt和wxPython GUI工具包都有自己的优势。
WxPython使用原生小部件使得开发的应用程序与计算机上的应用程序几乎没有不同。另外,对于wxPython的跨平台不要期待太高,它有时会在某些平台上出现安装问题,因为它没有提供多层抽象来屏蔽平台之间的差异。
至于WxPython和PyQt到底要选择哪个,其实是没有定论的,首先你要看它们的哪些点吸引或者说是吸引了你,其次如果你是一个成熟的程序员,你要可以选择自己更擅长的,最重要的要根据项目的实际需求来进行选择。

