사실 꽤 쉽습니다. 한 가지 방법은 다음과 같습니다.
import wx
########################################################################
class MyPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.txtSizer = wx.BoxSizer(wx.VERTICAL)
txt = wx.TextCtrl(self)
self.txtSizer.Add(txt, 0, wx.EXPAND|wx.ALL, 5)
self.mainSizer.Add(self.txtSizer, 0, wx.EXPAND, 5)
add_btn = wx.Button(self, label="Add")
add_btn.Bind(wx.EVT_BUTTON, self.onAdd)
process_btn = wx.Button(self, label="Process")
process_btn.Bind(wx.EVT_BUTTON, self.onProcess)
self.mainSizer.Add(add_btn, 0, wx.ALL, 5)
self.mainSizer.Add(process_btn, 0, wx.ALL, 5)
self.SetSizer(self.mainSizer)
#----------------------------------------------------------------------
def onAdd(self, event):
""""""
self.txtSizer.Add(wx.TextCtrl(self), 0, wx.EXPAND|wx.ALL, 5)
self.mainSizer.Layout()
#----------------------------------------------------------------------
def onProcess(self, event):
""""""
children = self.txtSizer.GetChildren()
for child in children:
widget = child.GetWindow()
if isinstance(widget, wx.TextCtrl):
print widget.GetValue()
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Dynamic")
panel = MyPanel(self)
self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
보너스로, 텍스트 컨트롤에서도 정보를 얻는 방법을 보여줍니다. 텍스트 컨트롤을 추가 할 때 탭 순서가 엉망이됩니다.
사용 [MoveBeforeInTabOrder() (http://docs.wxwidgets.org/trunk/classwx_window.html#af2b92f61cd9f9e2e0efe4cce307e25b1) 또는 [MoveAfterInTabOrder() (http://docs.wxwidgets.org/trunk/classwx_window.html # a79e66079125e8420de269811bdb6f2b6)를 사용하여 탭 순서를 수정하십시오. –