2015-04-09 3 views
0

Я знаю, что глобальные переменные не являются лучшими для хороших программ, но для этой короткой задачи программирования я их использую. Я хочу обновить виджет масштабирования tkinter внутри функции, вызываемой потоком или привязкой ключа. Когда я пытаюсь использовать метод scale.set (value) в любой из этих функций, python по какой-то причине интерпретирует его как «int».Виджет шкалы Tkinter в некоторых случаях называется «int»

В этом случае нет никаких проблем:

w = tk.Scale(master=frame, from_=50, to=0) 
w.set(0) 
w.grid(column=1, row=1, sticky=W+N+E+S) 

def test(x): 
    global w 
    w.set(x) 

test(17) 

Но когда я пытаюсь использовать экземпляр масштаба в функции, вызываемой связанным ключом он дает мне эту ошибку,

(File "TestingRoverMap.py", line 161, in test 
    w.set(x) 
AttributeError: 'int' object has no attribute 'set') 

когда выполняется следующий код:

w = tk.Scale(master=frame, from_=50, to=0) 
w.set(0) 
w.grid(column=1, row=1, sticky=W+N+E+S) 

def upKey(event): 
    global w 
    w.set(48) 

Функция upKey вызывается, когда вы нажимаете вверх направление ke y на клавиатуре, и этот код опущен, потому что я уверен, что он работает отлично.

Может ли кто-нибудь дать мне несколько указателей? Я так потерялся в этом, потому что никогда раньше не встречал ничего подобного.

Спасибо.

+0

это звучит так, будто вы можете случайно использовать переменную w для чего-то еще более позднего времени, вы удвоили свой код, чтобы убедиться, что это не так? –

+0

Да, я убедился, что это единственный экземпляр этого имени var, и это только дает мне ошибку, когда я использую его с этим вызовом функции или вызовом функции с потоковой функцией. И если я попытаюсь использовать контрольные переменные для виджета, они работают неправильно. Я не могу вернуть текущее значение шкалы с помощью управляющей переменной или изменить текущее значение шкалы с помощью управляющей переменной. – Tim

+0

Нет! Вы были правы! Я не заметил одного экземпляра. Спасибо огромное! – Tim

ответ

1

Оказывается, что я повторно использовал «w» в качестве значения позже в моем коде, чтобы повторно сбросить значение и дал мне ошибку атрибута. Этот вопрос решен.

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