wxpython从ID访问对象

时间:2012-09-21 19:50:53

标签: python wxpython python-2.7

在wxPython应用程序中创建的每个对象都会创建id。它可以作为参数提供,也可以自动使用id=wx.NewId()创建。

根据我的理解,使用对象id,您可以从其他地方引用该对象,但我找不到任何关于如何完成此操作的简单解释。

有人能指出我正确的方向,或者对此有所了解吗?

(注意:我不希望通过ID绑定事件,这是我在整个地方找到的唯一教程。)

2 个答案:

答案 0 :(得分:2)

我不认为有这样做的内置方法......但你可以做这样的事情

my_ids = {}

def widget_factory(widget_class,parent,id,*args,**kwargs):
     w = widget_class(parent,id,*args,**kwargs)
     my_ids[id] = w

def get_widget_by_id(widget_id):
     return my_ids[widget_id]

显然有一个功能......

http://wxpython.org/docs/api/wx.Window-class.html#FindWindowById

答案 1 :(得分:2)

免责声明:我从OP问题中提取了此答案。 Answers should not be contained in the question itself


Jase提供的答案,但基于answer by Joran Beasley

在类FindWindowById()中找到的函数wx.Window,大多数小部件都是该子类的子类。

通过在父对象(尚未尝试祖父等)上调用此函数,它返回所讨论对象的指针(副本?),使得:(在交互式解释器中)

import wx
app = wx.App()
frame = wx.Frame(None)
but = wx.Button(frame, -1, label='TestButton')
frame2 = wx.Frame(None)

butId = but.GetId()
test = wx.Window.FindWindowById(butId)         # Fails with TypeError
  # TypeError: unbound method FindWindowById() must be called with Window instance as
  # first argument (got int instance instead)
test = Frame2.FindWindowById(butId)            # returned either a None object or nothing at all.
test = Frame.FindWindowById(butId)             # returned a pionter (copy?) of the object in such a
  # manner that the following worked:
label = test.GetLabel()
print label                                    # displayed u'TestButton'

因此,通过了解对象的id,可以获取指向该对象的指针,以便对其进行进一步处理。