2014-11-21 51 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

相关问题