2011-12-30 2 views
0

여러 항목을 표시하는 코드가 있으며 항목 수는 이전 항목에 따라 달라집니다. 문제는 항목을 독립적으로 가질 수 없다는 것입니다.
여기에 내 코드가 있습니다 (문제의 일부일뿐입니다).이 코드를 사용하면 선택한 항목이 표시되지만, 입력하면 모든 항목이 편집됩니다.Python Tkinter - 여러 개의 항목을 a에 넣습니다.

#The variable amCon is acquired previously 
for r in range(amCon): 
    cant_entry = ttk.Entry(mainframe, textvariable=names) 
    cant_entry.grid(column=0, row=r+1, sticky='WE') 

개별적으로 사용할 수 있도록 목록의 각 항목을 가질 수 있기를 원합니다.

답변

0

모든 입력 위젯에 동일한 변수가 지정됩니다. 각각에 대해 별도의 변수를 만들거나 textvariable1 옵션을 사용하지 않아야합니다. 이 옵션은 필요하지 않습니다. 위젯 자체의 메소드를 사용하여 위젯의 내용을 가져오고 설정할 수 있습니다. textvariable은 주로 편의상 사용됩니다 (변수가 변경 될 때 알 수 있도록 변수에 추적을 적용하는 것이 좋기 때문에). 여기

5 개 항목, 목록으로 다른 다섯 가지의 값을 보여줍니다 여섯 번째 항목이 인위적인 예입니다 :

import tkinter as tk 
import ttk 

class App(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.size=5 
     self.vars = {} 
     for i in range(self.size): 
      self.vars[i] = tk.StringVar() 
      entry = ttk.Entry(self, textvariable=self.vars[i]) 
      entry.pack(side="top", fill="x") 
      self.vars[i].trace("w", self.callback) 

     # this entry will show the other values as a list 
     self.e0Var = tk.StringVar() 
     self.e0 = ttk.Entry(self, textvariable=self.e0Var) 
     self.e0.pack(side="top", fill="x", pady=(4,0)) 

     # call the callback once to establish the initial value 
     self.callback() 

    def callback(self, *args): 
     values = [] 
     for i in range(self.size): 
      values.append(self.vars[i].get()) 
     # make a comma separated list and store in e0Var 
     self.e0Var.set(str(values)) 

app = App() 
app.mainloop() 
1

나는 cant_entry보다 다른 변수를 원한다고 생각합니다. 목록을보십시오!

entries = [] 
entries.append(ttk.Entry(mainframe, textvariable=names)) 
entries[0] 

당신은 당신이 같은 이름 (cant_entry) 그들은 모두 나타납니다에서 다른 물건을 배치 할 때, 볼 수 있지만, 그들은 모두 cant_entry에 연결되어 있습니다. cant_entry를 편집하면 다른 모든 cant_entry도 편집됩니다. 목록은 훨씬 더 동적이며 append 함수를 사용하여 요소를 목록에 배치 할 수 있습니다. 그런 다음 항목 [항목 수]를 사용하여 입력 한 내용을 가져옵니다.

+0

** 당신이 잘못 뭐라고 ** 그들은 모두 없습니다. 'cant_entry'에 링크되어 있습니다. 링크는 모든 항목이'textvariable' 옵션에 대해 동일한 변수를 사용하고 있기 때문에 발생합니다. –

+0

mm. 저는 Tkinter에 대한 엄청난 전문가는 아니지만, 저는 그들이 모두 같은 변수에 배정되었음을 알았습니다. – user1122107