label_text является объектом tk.StringVar. Вам нужно вызвать .get (), чтобы получить строку, которую он представляет.
#Add odd
for i,x in enumerate(label_text.get()):
if i % n == 0:
odd=odd+int(x)
Метка содержит текст =, потому что ваш для l oop оценивается только один раз, когда запись пуста, поэтому ее длина равно 0.
Если вы хотите, чтобы вторая метка обновилась с такой длиной, у вас другая проблема. odd
- это переменная python, а не объект переменной tkinter, которая имеет привязки для уведомления слушателей, таких как метка tkinter. У вас есть несколько вариантов для этого. Вы можете привязать событие к записи, использовать функцию проверки записи (несколько более сложную) или просто обновить, когда кнопка нажата, как показано ниже.
odd = tk.IntVar(root)
#Add odd
for i,x in enumerate(label_text.get()):
if i % n == 0:
odd.set(odd.get()+int(x))
label2=tk.Label(root, textvariable=odd)
label2.pack()
Это будет ie значение «нечетно» для отображения «label2», но ваш для l oop все еще выполняется только один раз, до инициализации. Чтобы это исправить, вам нужно пересматривать каждый раз, когда нажимается кнопка:
def calc_length():
for i,x in enumerate(label_text.get()):
if i % n == 0:
odd.set(odd.get()+int(x))
def show_text():
label_text.set(entry_text.get())
calc_length()
entry_text = tk.StringVar()
entry = tk.Entry(root, width=12, textvariable=entry_text)
entry.pack()
button = tk.Button(root,text="Run add", command=show_text)
button.pack()
label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()
odd = tk.IntVar(root)