wxPython官方文档中文翻译 - 窗口ID概述

60 阅读1分钟

官方文档:docs.wxpython.org/window_ids_…

wxPython的各种控件和其他部分都需要一个ID。有时,ID可能由用户直接提供,或者具有一个预定义的值,例如wx.ID_OPEN。然而,通常情况下,ID的值并不重要,可以通过调用wx.Window.NewControlId自动生成,或者将wx.ID_ANY作为对象的ID来传递。

生成ID有两种方式。一种方式是从负数开始,对于每一个新的ID,返回下一个更小的数。对于那些能够将整个负数范围都用作ID的系统来说,这种方式是可行的,因为这能提供足够多的ID,而且要用完这些ID并出现循环重复的情况需要非常非常长的时间。然而,有些系统无法使用ID值的整个范围。例如,Windows系统只能使用16位的标识符,并且通过wx.Window.NewControlId方法大约只能生成32000个可能的自动ID。如果程序运行的时间足够长,根据程序本身的情况,使用第一种方法会导致ID循环回到正数ID范围,从而可能与任何直接指定的ID值发生冲突。

另一种方法是跟踪wx.Window.NewControlId返回的ID,并且在某个ID完全空闲且未被任何其他对象使用之前,不再重复返回该ID。这将确保各个ID值之间不会相互冲突。这可以通过为wx.Window.NewControlId可能返回的每个ID维护一个引用计数来实现。其他ID则不进行引用计数。

另请参阅 wx.IdManagerwx.Window.NewControlIdwx.Window.UnreserveControlId