wxPython小部件同名吗?

2024-06-28 20:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么下面的代码创建了两个小部件,却没有相互覆盖?一审和二审之间有什么关系?你知道吗

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()

Tags: 代码importnonefalseapp关系部件frame
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:

还有另一个对TextCtrl对象的引用,因此它不会像您期望的那样被删除。您的panel包含其所有子级的列表。要删除wxPython小部件,必须显式调用其^{}方法。所以在你的情况下是:

textbox = wx.TextCtrl(panel, -1, "", (10,10), (135,20))
textbox.Destroy()
textbox = wx.TextCtrl(panel, -1, "", (10,40), (135,20))

为了能够访问这两个对象,您要么按照@jornsharpe的建议执行,要么使用^{}方法。不过,在应用程序中自己保存对所有小部件的引用是首选方法。你知道吗

相关问题 更多 >