Python контролирует количество движения пикселей в tkinter

posshift = 1
def scrollimage(event):
    if event.keysym =='Up':
            posshift = posshift + 1
    elif event.keysym == 'Down':
            posshift = posshift - 1
    elif event.keysym =='Left':
            canvas_1.move(ALL,15,0)
    elif event.keysym =='Right':
            canvas_1.move(ALL,-15,0)

В следующем коде я пытаюсь заставить графику на экране перемещаться на определенное расстояние влево или вправо. Это работает правильно. Я хотел бы, чтобы это произошло так, чтобы, когда я нажимаю стрелку вверх, он увеличивал количество движений (15 становится 16, 17, 18, 19) как слева, так и справа, и когда я нажимаю клавишу со стрелкой вниз. это уменьшает количество движения (15 становится 14, 13, 12, 11). Когда я меняю ALL, 15, 0 на ALL, posshift, 0, все, что я получаю, это ошибка в том, что posshift увеличивается до его создания. У меня есть posshift, созданный сразу после операторов импорта, прежде чем функция будет создана. Что мне нужно сделать, чтобы иметь возможность увеличивать/уменьшать значение движения, когда я нажимаю клавиши со стрелками влево/вправо. Я сейчас не в Linux, где у меня установлен python, поэтому я не могу указать точную ошибку, которая возникает ... Я помню первую часть строки ошибки, в которой говорилось Unbound ... если это поможет.

Также в очень похожем вопросе ... Я признаю, что еще не пробовал это, это не поразило меня, пока я не лег спать прошлой ночью, и я до сих пор не вернулся к компьютеру, поэтому я думаю, что спрошу сначала волнуйся потом. Как мне сослаться на клавиши PageUp, PageDown, Home, End. Я хочу, чтобы они также использовались для отдельных идей в этой программе, очень скоро, например, сегодня вечером. Я знаю, что мне, вероятно, придется ссылаться на них как в функции, так и в canvas.bind_all.


person confused    schedule 27.12.2013    source источник


Ответы (1)


Ваша проблема здесь в том, что вы пытаетесь смешать глобальное объявление с локальным определением. Это не сработает. Если вы измените свой код на

posshift = 1
def scrollimage(event):
    global posshift
    if event.keysym =='Up':
            posshift = posshift + 1
    elif event.keysym == 'Down':
            posshift = posshift - 1
    elif event.keysym =='Left':
            canvas_1.move(ALL,15,0)
    elif event.keysym =='Right':
            canvas_1.move(ALL,-15,0)

Тогда это сработает.

Хотя в этом случае вам, вероятно, следует подумать о создании класса. Вы можете сделать что-то вроде:

class Image:
     def __init__(canvas):
         self.posshift = 1
         self.canvas = 1

     def move_left(self):
         self.canvas.move(ALL, self.posshift, 0)

     def move_right(self):
         self.canvas.move(ALL, -1*self.posshift, 0)

Конечно, есть несколько других способов добиться того, что вам нужно. Это может быть или не быть лучшим способом.

person Wayne Werner    schedule 27.12.2013