2014-11-21 16 views
1

我應該能夠使用一個循環做下面的,而不是寫出來更多的widget,比我會永遠需要的,縮短我的代碼。此是我現在做的方式:如何在循環中創建具有不同名稱的多個tkinter小部件?

db = sqlite3.connect('/path/to/database') 
cursor = db.cursor() 
cursor.execute("SELECT Drug FROM database where current >= 1") 
allrec = cursor.fetchall() 
numrec = len(allrec) 
cursor.execute("SELECT Drug FROM database where current >= 1") 
results = cursor.fetchone() 
if numrec == 0: 
    exit 
else: 
    c1=Checkbutton(frame1,variable=var1) 
    c1.grid(row=0,column=0,sticky='nw') 
    c1.config(bg='black') 
    e1=Entry(frame1, bg="black", fg="white") 
    e1.grid(row=0, column=1, sticky=NW) 
    e1.delete(0, END) 
    for row in results: 
     e1.insert(END, *results) 
results = cursor.fetchone() 
if numrec <= 1: 
    quit 
else: 
    c2=Checkbutton(frame1,variable=var2) 
    c2.grid(row=1,column=0,sticky='nw') 
    c2.config(bg='black') 
    e2=Entry(frame1, bg="black", fg="white") 
    e2.grid(row=1, column=1, sticky=NW) 
    e2.delete(0, END) 
    for row in results: 
     e2.insert(END, *results) 

    record 3 ........ 
    record 4 ........ 
    ....... 
    ....... 
    record 15 ....... 

這創建15個不同名稱的複選框和輸入框,以便我可以從我的數據庫中插入記錄。

+1

使用一個列表,然後使用'record [0]'訪問等。 – matsjoyce 2014-11-21 17:52:35

回答

4

而不是有十五個變量名爲c1,c2 ... c15,創建一個列表,將保存所有的檢查按鈕。對你的詞條和變量做同樣的事情。

checkbuttons = [] 
entries = [] 
vars = [] 
for i in range(numrec): 
    results = cursor.fetchone() 
    var = IntVar() 
    check_button=Checkbutton(frame1,variable=var) 
    check_button.grid(row=i,column=0,sticky='nw') 
    check_button.config(bg='black') 
    entry=Entry(frame1, bg="black", fg="white") 
    entry.grid(row=i, column=1, sticky=NW) 
    entry.delete(0, END) 
    for row in results: 
     entry.insert(END, *results) 
    checkbuttons.append(check_button) 
    entries.append(entry) 
    vars.append(var) 

現在,與e6第六項,你可以用entries[5]得到它。

+0

我不確定如何從列表中獲取。我得到的只是一個很長的十進制數字 – user3691529 2014-11-25 20:30:00

+0

要從列表中獲得什麼? – Kevin 2014-11-25 20:31:41

+0

在上面的例子中,我如何獲得輸入框中的文本? – user3691529 2014-11-25 20:35:14

相關問題