2015-01-24 2 views
0

Я пытаюсь создать цикл for, который делает метки и записи, используя цикл 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, которая не является желаемой.

+0

[Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve) – Lafexlos

+0

@Lafexlos Что в этом плохого? Объясните, что я сделал неправильно, так как примеры воспроизводимы. – 18166

+0

ничего не _horribly_ неправильно, но было бы лучше, если бы вы добавили импорт (-ы), что такое 'edit_recipe_window' (что, вероятно, экземпляр Tk) и' y' и т. Д. Я имею в виду пример _complete_, который воспроизводит ошибку. Кстати, я не сторонник, но это может быть поворотным противником. – Lafexlos

ответ

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.

Возможно, вы захотите использовать r += 1 в конце своего if, чтобы избавиться от перезаписи ваших виджетов.

Смежные вопросы