WxPython在Windows和Linux上的差异
我找到的关于WxPython的教程大多都是用Linux的例子,但在一些细节上似乎有些不同。
比如,在Windows系统中,想要正确显示背景,面板(Panel)是必须的,不能省略。此外,有些在教程中看起来没问题的例子,在我电脑上却无法运行。
所以,你知道有哪些重要的区别吗?或者有没有专门针对Windows的好教程推荐?
补充:我刚想起来这一点:有没有人知道为什么在子类化wx.App时需要一个OnInit()方法,而不是更直观的__init__
()呢?
3 个回答
编辑:我刚想起来这一点:有没有人知道为什么在子类化 wx.App 时需要一个 OnInit() 方法,而不是更合逻辑的
__init__()
呢?
我使用 OnInit()
是为了保持一致性:还有一个 OnExit()
方法。
编辑:我可能错了,但我觉得使用 OnInit()
不是必须的。
我发现了一些小差别,但记不全。这里有两个例子:
1) 界面的布局可能会稍有不同,比如在一个操作系统上,某些东西可能无法完全适应窗口,而在另一个操作系统上却可以。我没有深入研究原因,但通常在我使用位置来安排东西,而不是使用布局工具时,这种情况最常见。
2) 在Windows系统中,我需要更频繁地手动调用Refresh
。比如,如果你把一个面板放在另一个面板上,在Windows中,直到你调用Refresh之前,你是看不到上面的面板的。
一般来说,我是在Linux上写应用程序,然后在Windows上运行,两个系统的表现差不多,所以这样做是合理的,但我很少遇到在切换操作系统后,程序能完美运行的情况。
我注意到我之前写的一个小图形界面程序有些奇怪的问题,不过已经过去很久了,具体的细节我记不太清了。你有没有一些具体的例子是出错的?也许我们可以一起改进它们,修复这些bug?
你有没有试过官方的wxPython教程?……还是说你想要更具体的内容?
关于你的编辑 - 你应该使用OnInit()
,因为你是在子类化wx.App(也就是说,这是wxWidgets的要求,而不是Python的),而wxPython的实现尽可能只是wxWidgets的一个包装。
[编辑] Zetcode有一个相当详细的wxPython教程。我自己还没全部看过,但这可能对你有帮助?
wxWidgets::wxApp::OnInit()
的文档写得比较清楚:
这个方法必须由应用程序提供,通常会创建应用程序的主窗口,并可以选择调用wxApp::SetTopWindow。你可以使用OnExit来清理在这里初始化的任何内容,只要这个函数返回true。
如果wxWidgets没有提供一个通用的接口,那么在C++中你就得做不同的事情(使用构造函数),而在Python中则是__init__(self,...)
。使用一种与语言无关的初始化方式,可以让wxWidgets在其他语言中的移植看起来更相似,这应该是件好事,对吧?:-)