在 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
如你所见,首先它把 Label
和 Entry
放在 if
中,然后它们被 Label
和 Entry
覆盖在 else
。
您可能想在 if
末尾使用 r += 1
来避免覆盖您的小部件。
我正在尝试使用 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
如你所见,首先它把 Label
和 Entry
放在 if
中,然后它们被 Label
和 Entry
覆盖在 else
。
您可能想在 if
末尾使用 r += 1
来避免覆盖您的小部件。