为什么以下代码会创建2个小部件,而不是相互覆盖?有人会如何引用第一个实例和第二个实例?
import wx
app = wx.App(False)
frame = wx.Frame(None, -1, "Test", (250,250), (250,250))
panel = wx.Panel(frame, -1)
textbox = wx.TextCtrl(panel, -1, "", (10,10), (135,20))
textbox = wx.TextCtrl(panel, -1, "", (10,40), (135,20))
frame.Show()
app.MainLoop()
答案 0 :(得分:2)
创建小部件,然后将其分配给名称。第一个仍然存在,但是您很难访问它,因为您已为该名称指定了不同的对象。如果您仍想访问它们,请尝试:
textboxes = []
textboxes.append(wx.TextCtrl(panel, -1, "", (10,10), (135,20)))
textboxes.append(wx.TextCtrl(panel, -1, "", (10,40), (135,20)))
现在您可以通过索引访问每个:
textboxes[0]
或者遍历所有这些:
for textbox in textboxes:
答案 1 :(得分:1)
您的TextCtrl
对象还有另一个引用,因此它不会像您期望的那样被删除。您的panel
会列出其所有子女的列表。要删除wxPython小部件,必须显式调用其Destroy()
方法。所以在你的情况下,它将是:
textbox = wx.TextCtrl(panel, -1, "", (10,10), (135,20))
textbox.Destroy()
textbox = wx.TextCtrl(panel, -1, "", (10,40), (135,20))
要能够访问这两个对象,您必须按照@jonrsharpe的建议进行操作,或者您可以使用GetChildren()
方法。但是,首先在您的应用程序中保留对所有小部件的引用是首选方法。