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在创建之前递增的行的错误。在创建函数之前,我在import语句之后创建了posshift。当我按左/右箭头键时,我需要做什么才能增加/减少移动的值。我现在不在Linux上,我安装了python,所以我不能给出确切的错误...我记得错误行的第一部分说Unbound ...如果有帮助。
同样在一个非常相似的问题中......我还没有尝试过这个,直到我昨晚睡觉才发现它并没有打到我,直到现在我才回到电脑上所以我想我会先问,稍后再担心。如何引用PageUp,PageDown,Home,End键。我很快就会想要他们在这个计划中提出不同的想法,就像今晚可能一样。我知道我可能不得不在函数和canvas.bind_all中引用它们。
答案 0 :(得分: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)
当然,还有其他几种方法可以实现您的目标。这可能是也可能不是最佳方式。