2012-09-21 76 views
1

答案由Joran Beasley提供。他提供的鏈接滿足了我的需求。問題底部的示例。wxpython從ID訪問對象

在wxPython應用程序中創建的每個對象都會創建一個id。它可以作爲參數給出,或者使用id=wx.NewId()自動創建。

據我所知,與一個對象的id然後你可以從其他地方引用該對象,但我找不到任何簡單的解釋如何做到這一點。

任何人都可以在正確的方向指向我,也許可以對此有所瞭解嗎?

(注:我不是在尋找通過ID綁定的事件,那就是我發現所有的地方唯一的教程)

答: 在類wx.Window,發現該功能FindWindowById()其中大部分小部件是的子類。

通過調用一個對象的父這個功能有問題的對象(沒有嘗試過盛大的父母等),它返回一個指針,使得(複印件):(在交互式解釋)

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,可以獲取指向該對象的指針,以便可以進一步處理它。

我對Joran ;-)

+0

林不知道......我一直在WX extensivly很長一段時間,從來沒有通過ID得到......通常你都封裝成類,哈哈有權訪問他們需要的東西......你可以在構造函數中編寫一些包裝/工廠函數來將ID存儲在全局字典中供以後查找... –

回答

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

+0

@joran .. 好的,關於鏈接功能,那麼我會打電話給它。該功能是類窗口的功能。因此,要獲得與id wxSomeID關聯的窗口...唉打開interperator,並嘗試自己...愚蠢的評論 – Jase

+0

所以稱之爲您的主框架可能? –

+0

@joran ... 大聲笑...剛剛嘗試過三個版本。一個調用有關對象的函數(多餘的,因爲如果我們知道有問題的對象是沒有用的).....兩個調用wx.Window.FindObjectById(###)(它像我一樣的力氣,因爲有沒有Window類的實例來爲函數調用生成自我數據).....三個在父級別對象上調用它test = frame.FindWindowById(###)(成功).... four test = frame2.FindWindowById (###)(第2幀不在我們神祕物體的家族樹中)(失敗並且沒有返回(可能返回沒有???)所以道具和回答信用給你!ThankYou! – Jase