StringVar () as abc = '123456779' - PullRequest
       0

StringVar () as abc = '123456779'

0 голосов
/ 11 января 2020

Это действительно не должно быть так сложно. Если я не пропускаю что-то. Я ходил кругами, пытаясь заставить tkinter принять запись Entry (root) в виде строки. Если я определяю переменную как

abc = '123456789'

, код выполняется.

Если я пытаюсь сделать ab c = label_text, который является результатом функции, я получаю ошибку;

Объект StringVar не повторяется.

Как заставить объект функции работать как определенная строка?

Спасибо!

#odd series
import tkinter as tk
root = tk.Tk()
odd=0
n=2
abc='1234567'
def show_text():
    label_text.set( entry_text.get())
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()

#Add odd
for i,x in enumerate(label_text):
    if i % n == 0:
        odd=odd+int(x)

label2=tk.StringVar()       
label2=tk.Label(root,text=odd)
label2.pack()

root.mainloop()

1 Ответ

2 голосов
/ 11 января 2020

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...