2017-10-01 3 views
0

bitte ich möchte mehrere textctrl in einem panel und ich versuche, die namen und positionen dynamisch, mit dem folgenden code, kontrollen erscheint aber ich kann nicht die namen.set name von vielen textctrl itering im bereich

 p=0 
    for i in range(20): 
     p += 25 
     indesc ="ingdesc" 
     indesc = indesc + str(i) 
     print indesc 

     self.HERE I WANT TO PUT indesc value = wx.TextCtrl(self.panel,pos=(280,190+p),size=(350,23),style=wx.TE_READONLY) 

dank

+0

Wollen Sie den sichtbaren Inhalt der 'TextCtrl' einstellen? –

+0

Nein, ich möchte den Wert der Variable indesc auf den Namen des Attributs self setzen. in der Weise, jedes Textctrl itering auch zu nennen, danke –

Antwort

0

Sie es wie folgt tun:

import wx 

class MainFrame(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, title='Indesc') 
     self.panel = wx.Panel(self) 
     textctrls=[] 
     for i in range(20): 
      textctrls.append("self.indesc"+str(i)) 
     p=0 
     for i in range(20): 
      p+=25 
      textctrls[i] = wx.TextCtrl(self.panel,pos=(10,10+p),size=(350,23),style=wx.TE_READONLY) 
     textctrls[0].SetValue("Item 0") 
     textctrls[11].SetValue("Item 11") 
     self.Show() 

if __name__ == '__main__': 
    app = wx.App() 
    frame = MainFrame() 
    app.MainLoop() 

enter image description here

Aber und es ist ein großes ABER Sie machen das Leben selbst schwer, weil man nicht zugreifen kann die Einträge durch den String-Namen self.indesc11 zum Beispiel müssen Sie sich auf die Position in der list beziehen (soweit ich das beurteilen kann).
Es ist sinnvoll und klarer für die Zukunft, wenn Sie bei der Codierung dieser Art explizit sind. Es ist nur Kopieren und Einfügen schließlich.

+0

vielen Dank, dass es funktioniert –