2014-04-07 1 views
0

버튼을 클릭하여 textCtrl 상자를 동적으로 생성하는 방법이 있습니까? 그래서 사용자가 하나의 값을 입력하고자하는 경우 하나의 TextCtrl 상자를 제공하는 GUI를 만들 계획입니다. 그러나 사용자가 입력 할 값이 하나 더 필요하면 '+'또는 사용자가 추가 할 수있는 추가 버튼이 있어야합니다 프로그램이 하나 이상의 textCtrl 상자를 동적으로 만들고 GUI에 표시하여 사용자가 새로 만든 TextCtrl 상자에 입력 할 수 있도록하십시오!textCtrl 상자를 동적으로 만드는 방법은 무엇입니까?

미리 감사드립니다.

답변

0

사실 꽤 쉽습니다. 한 가지 방법은 다음과 같습니다.

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

보너스로, 텍스트 컨트롤에서도 정보를 얻는 방법을 보여줍니다. 텍스트 컨트롤을 추가 할 때 탭 순서가 엉망이됩니다.

+0

사용 [MoveBeforeInTabOrder() (http://docs.wxwidgets.org/trunk/classwx_window.html#af2b92f61cd9f9e2e0efe4cce307e25b1) 또는 [MoveAfterInTabOrder() (http://docs.wxwidgets.org/trunk/classwx_window.html # a79e66079125e8420de269811bdb6f2b6)를 사용하여 탭 순서를 수정하십시오. –

관련 문제