Python控制tkinter中像素移动的数量

时间:2013-12-27 22:10:48

标签: 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在创建之前递增的行的错误。在创建函数之前,我在import语句之后创建了posshift。当我按左/右箭头键时,我需要做什么才能增加/减少移动的值。我现在不在Linux上,我安装了python,所以我不能给出确切的错误...我记得错误行的第一部分说Unbound ...如果有帮助。

同样在一个非常相似的问题中......我还没有尝试过这个,直到我昨晚睡觉才发现它并没有打到我,直到现在我才回到电脑上所以我想我会先问,稍后再担心。如何引用PageUp,PageDown,Home,End键。我很快就会想要他们在这个计划中提出不同的想法,就像今晚可能一样。我知道我可能不得不在函数和canvas.bind_all中引用它们。

1 个答案:

答案 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)

当然,还有其他几种方法可以实现您的目标。这可能是也可能不是最佳方式。