2013-03-10 17 views
0
self.btid = 0 
self.btarray = [] 
self.btarray.append("x")#so that the buttons are appended according to their ids 


self.bmt = wx.BitmapButton(panel, btid, pic, pos=(50,50)) 
self.btarray.append(self.bmt) 

self.btid += 1 

我使用相同的代碼創建多個按鈕。我以後如何檢索單個按鈕的ID?如何檢索wxpython中的位圖按鈕ID?

由於提前, Swayam

+0

您沒有設置任何id到按鈕。你沒有定義btid,但self.btid – joaquin 2013-03-10 07:05:32

+0

我迭代地創建多個按鈕,btid的值在每次迭代後都增加1 – 2013-03-10 11:48:00

+0

不,在您的代碼中不會增加「btid」。 'self.btid'是。 – joaquin 2013-03-10 20:15:03

回答

1

GetId是得到一個對象的ID的方法。 所以你可以這樣寫:

id_of_button_n = button_n.GetId() 

然而你的情況,這時並不需要,因爲你已經存儲的ID作爲字典self.btarray的鑰匙!

+0

我想我會使用GetId()。這樣我希望不要使用陣列! – 2013-03-10 11:49:34

+0

您可以使'self.btarray'爲詞典,或者預先填寫'self.btarray'列表。否則你的代碼將無法工作。你不能像你一樣分配到一個空的列表。有一個空列表的路要走'追加' – joaquin 2013-03-10 20:32:13

+0

謝謝!即使我有一組按鈕,只需單擊GUI中的按鈕,我如何獲得單個元素的ID? – 2013-03-12 06:59:01

0

這是一個快速和骯髒的腳本,將告訴你如何獲得按鈕ID和標籤。我使用正常的wx.Button對象,因爲沒有很好的方法在堆棧中包含用於位圖按鈕的圖像:

import random 
import wx 

######################################################################## 
class MyPanel(wx.Panel): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self, parent): 
     """Constructor""" 
     wx.Panel.__init__(self, parent=parent) 
     mainSizer = wx.BoxSizer(wx.VERTICAL) 

     i = random.choice(range(5, 10)) 
     for index, item in enumerate(range(i)): 
      num = index + 1 
      btn = wx.Button(self, label="Button %s" % num) 
      btn.Bind(wx.EVT_BUTTON, self.onClick) 
      mainSizer.Add(btn, 0, wx.ALL|wx.CENTER, 5) 

     self.SetSizer(mainSizer) 

    #---------------------------------------------------------------------- 
    def onClick(self, event): 
     """""" 
     btn = event.GetEventObject() 
     print "%s id => %s" % (btn.GetLabel(), btn.GetId()) 

######################################################################## 
class MainFrame(wx.Frame): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Random Buttons", size=(1024, 768)) 
     panel = MyPanel(self) 
     self.Show() 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MainFrame() 
    app.MainLoop() 
+0

非常感謝! – 2013-03-14 09:53:54