WxPython在Windows和Linux上的差异

1 投票
3 回答
2683 浏览
提问于 2025-04-15 11:52

我找到的关于WxPython的教程大多都是用Linux的例子,但在一些细节上似乎有些不同。

比如,在Windows系统中,想要正确显示背景,面板(Panel)是必须的,不能省略。此外,有些在教程中看起来没问题的例子,在我电脑上却无法运行。

所以,你知道有哪些重要的区别吗?或者有没有专门针对Windows的好教程推荐?

补充:我刚想起来这一点:有没有人知道为什么在子类化wx.App时需要一个OnInit()方法,而不是更直观的__init__()呢?

3 个回答

0

编辑:我刚想起来这一点:有没有人知道为什么在子类化 wx.App 时需要一个 OnInit() 方法,而不是更合逻辑的 __init__() 呢?

我使用 OnInit() 是为了保持一致性:还有一个 OnExit() 方法。

编辑:我可能错了,但我觉得使用 OnInit() 不是必须的。

0

我发现了一些小差别,但记不全。这里有两个例子:

1) 界面的布局可能会稍有不同,比如在一个操作系统上,某些东西可能无法完全适应窗口,而在另一个操作系统上却可以。我没有深入研究原因,但通常在我使用位置来安排东西,而不是使用布局工具时,这种情况最常见。

2) 在Windows系统中,我需要更频繁地手动调用Refresh。比如,如果你把一个面板放在另一个面板上,在Windows中,直到你调用Refresh之前,你是看不到上面的面板的。

一般来说,我是在Linux上写应用程序,然后在Windows上运行,两个系统的表现差不多,所以这样做是合理的,但我很少遇到在切换操作系统后,程序能完美运行的情况。

2

我注意到我之前写的一个小图形界面程序有些奇怪的问题,不过已经过去很久了,具体的细节我记不太清了。你有没有一些具体的例子是出错的?也许我们可以一起改进它们,修复这些bug?

你有没有试过官方的wxPython教程?……还是说你想要更具体的内容?

关于你的编辑 - 你应该使用OnInit(),因为你是在子类化wx.App(也就是说,这是wxWidgets的要求,而不是Python的),而wxPython的实现尽可能只是wxWidgets的一个包装。

[编辑] Zetcode有一个相当详细的wxPython教程。我自己还没全部看过,但这可能对你有帮助?

wxWidgets::wxApp::OnInit()的文档写得比较清楚:

这个方法必须由应用程序提供,通常会创建应用程序的主窗口,并可以选择调用wxApp::SetTopWindow。你可以使用OnExit来清理在这里初始化的任何内容,只要这个函数返回true。

如果wxWidgets没有提供一个通用的接口,那么在C++中你就得做不同的事情(使用构造函数),而在Python中则是__init__(self,...)。使用一种与语言无关的初始化方式,可以让wxWidgets在其他语言中的移植看起来更相似,这应该是件好事,对吧?:-)

撰写回答