2014-04-07 5 views
0

Есть ли способ создать текстовое поле Ctrl динамически, нажав кнопку? Итак, я планирую создать графический интерфейс, в котором я предоставляю одно поле TextCtrl для ввода пользователем одного значения по умолчанию. Но если пользователю требуется ввести еще одно значение, должна быть кнопка «+» или «Добавить», где пользователь может создайте так, чтобы программа могла динамически создать еще один блок textCtrl и отобразить его в графическом интерфейсе, чтобы пользователь мог ввести свой ввод в только что созданном поле TextCtrl!Как создать текстовое поле Ctrl динамически?

Спасибо заранее!

ответ

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), чтобы исправить порядок вкладок. –

Смежные вопросы