Сбрасывыется значение переменной python
Имеется код:
from tkinter import Tk
root=Tk()
code = ""
def key_pressed(event, code=code):
code += event.char
print(code)
root.bind("<Key>",key_pressed)
root.mainloop()
То есть при нажатии на любую клавишу, символ добавляется в переменную code. Но при тесте программы вижу, что при нажатии на клавишу у меня значение переменной code становится пустым и в него записывается только последняя клавиша. Кто знает, подскажите в чем проблема?
Вот код:
from tkinter import Tk
root=Tk()
code = ""
def key_pressed(event):
global code
code += event.char
print(code)
def osh():
print("Press F10")
root.bind("<F10>", osh())
root.bind("<Key>",key_pressed)
root.mainloop()
При запуске выводит "Press F10", хотя должен выводить только если нажал F10. Что делать?
Ответы (2 шт):
При изменении значения внутри функции создается локальная переменная code, которая скрывает глобальную. Это приводит к тому, что внутри функции key_pressed используется локальная переменная code. которая инициализируется пустой строкой каждый раз при вызове функции.
Updated(Решение проблемы):
def key_pressed(event):
global code
code += event.char
print(code)
Можно использовать атрибут функции для накопления последовательности символов.
from tkinter import Tk
root = Tk()
def key_pressed(event):
key_pressed.sequence += event.char
print(key_pressed.sequence)
key_pressed.sequence = ''
root.bind("<Key>", key_pressed)
root.mainloop()
1
12
123
123a
123ab
123abc
123abcd
123abcde
123abcdef
