2015-02-03 2 views
0

То, что я пытаюсь сделать, это построить окно с номером (значение по умолчанию = 1) и 3 кнопки внизу под ним: «UP», «DOWN» и «QUIT». Кнопка «Вверх» будет увеличивать число на 1, а остальные кнопки будут понятны, что они делают.Динамически меняющаяся переменная метки

from Tkinter import * 
root=Tk() 
number=1 
Label(root,text=number,height=10,width=7).grid(row=0,pady=10,padx=10,column=10,columnspan=2,sticky=W+E) 

def auksisi(number): 
    number+=1 
    return number 
def meiosi(number): 
    number = number -1 
    return number 
Label(root, text=auksisi(number),height=10,width=7).grid(row=0,pady=10,padx=10,column=10,columnspan=2,sticky=W+E) 
Button(root, text="up",command=lambda: auksisi(number)).grid(row=3,column=2,columnspan=2) 
Button(root, text="down",command=lambda: meiosi(number)).grid(row=3,column=3,columnspan=2) 
Button(root, text="quit",command=root.destroy).grid(row=3,column=4,columnspan=2) 

root.update() 
root.mainloop() 

Что происходит, когда я нажать кнопки ничего changes.Don't беспокоиться о макете я исправить это, я просто хочу, кнопки для работы.

+0

'auksisi' и' meiosi' фактически не обновляет 'label', чего вы ожидали случаться? – jonrsharpe

+0

Как я могу обновить ярлык? –

+0

Как бы то ни было, вы не можете, потому что вы не сохраняете ссылку на экземпляр «Label». В качестве альтернативы, я думаю, вы можете использовать 'IntVar' вместо vanilla' int'. – jonrsharpe

ответ

0

Метод grid возвращает None, и назвав его непосредственно после создания ваших объектов, сделает вашу возможных ссылки быть None, а также. Для того, чтобы изменить значения наклейки, вам нужна ссылка на него:

label_reference = Label(root, text=auksisi(number), height=10, width=7) 
label_reference.grid(row=0, pady=10, padx=10, column=10, columnspan=2, sticky=W+E) 

Теперь, через label_reference вы можете изменить текст, используя, например, метод config(). Вы можете сделать это в методе, который вызывается при нажатии ваших кнопок:

def auksisi(number): 
    number += 1 
    label_reference.config(text=number) 
    return number 
Смежные вопросы