在 for 循环中创建标签和条目

Creating labels and entries in a for loop

我正在尝试使用 for 循环制作一个用于制作标签和条目的 for 循环。这是代码:

r = 1   #r == row
c = 0   #c == column
n = 1   #n == number
a = 2   #a == checking what iteration
for count in y:                                                                                 #Iterates through y, defined earlier
    if a % 2 == 0:                                                                                   #Checks if a is even
        Label(edit_recipe_window, text="Ingredient " + str(n)).grid(row=r, column=c)
        c += 1
        entry_box= Entry(edit_recipe_window)
        entry_box.grid(row=r, column=c)
        entry_box.insert(0, count)
        c = 0
        a += 1
    else:
        Label(edit_recipe_window, text="Quantity and Unit " + str(n)).grid(row=r, column=c)
        c += 1
        quantity_box = Entry(edit_recipe_window)
        quantity_box.grid(row=r, column=c)
        quantity_box.insert(0, count)
        c = 0
        r += 1
        a += 1
    n += 1

这会产生数量 + 单位 2 的标签,这不是想要的结果。

如果您使用 print 进行调试,您会看到您将小部件放在每个 if-else 对的彼此之上。

from tkinter import *

edit_recipe_window = Tk()
if 1:
    r = 1   #r == row
    c = 0   #c == column
    n = 1   #n == number
    a = 2   #a == checking what iteration
    y = ["count1","count2","count3","count4","count5"]
    for count in y:
        if a%2 == 0:
            print ("inside if, label values", r, c)
            Label(edit_recipe_window, text="Ingredient " + str(n)).grid(row=r, column=c)
            c += 1
            print("inside if, entry values",r,c)
            entry_box= Entry(edit_recipe_window)
            entry_box.grid(row=r, column=c)
            entry_box.insert(0, count)
            c = 0
            a += 1

        else:
            print ("inside else, label values", r, c)
            Label(edit_recipe_window, text="Quantity and Unit " + str(n)).grid(row=r, column=c)
            c += 1
            print ("inside else, entry values", r, c)
            quantity_box = Entry(edit_recipe_window)
            quantity_box.grid(row=r, column=c)
            quantity_box.insert(0, count)
            c = 0
            r += 1
            a += 1
        n += 1

这将为 5 值 y

输出
inside if, label values 1 0  
inside if, entry values 1 1  
inside else, label values 1 0  
inside else, entry values 1 1  
inside if, label values 2 0  
inside if, entry values 2 1  
inside else, label values 2 0  
inside else, entry values 2 1  
inside if, label values 3 0  
inside if, entry values 3 1

如你所见,首先它把 LabelEntry 放在 if 中,然后它们被 LabelEntry 覆盖在 else

您可能想在 if 末尾使用 r += 1 来避免覆盖您的小部件。