Tkinter错误-元组索引超出范围

Hob*_*000 3 python tkinter

该程序应该在画布上放置一个精灵,以便用户使用向左和向右箭头键进行控制,但是我一直在获取Tuple索引超出范围错误,并且程序中没有任何tuple。我知道我正确地导入了图片,因此可能与按键事件有关。

#4/22/15
#Test game, user controlled sprite
import random
from Tkinter import *
import Tkinter
from PIL import Image, ImageTk

root = Tk()
root.geometry('700x600')

canvas = Canvas(root,width=700,height=600,bg='white')
canvas.place(x=0,y=0)

class Character_sprite(object):
    '''Creates the users sprite and handles the events'''
    def __init__(self):
        self.im = Image.open('grey_mario_mushroom_sprite.png')
        self.tkimage = ImageTk.PhotoImage(self.im)
        self.char_sprite = canvas.create_image(image=self.tkimage)

    def moveLeft(event):
        '''Handles the left arrow key press event, moves char_sprite to the left'''
        canvas.move(self.char_sprite,-20,0)
        canvas.update()
    def moveRight(event):
        '''Handles the right arrow key press event, moves the char_sprite to the right'''
        canvas.move(self.char_sprite,20,0)
        canvas.update()


root.bind('<Left>', Character_sprite.moveLeft)
root.bind('<Right>', Character_sprite.moveRight)
Character_sprite()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

这是错误:

Traceback (most recent call last):
  File "C:\Users\Calvin\Documents\Python Programs\Test_game_example.py", line 57, in <module>
    Character_sprite()
  File "C:\Users\Calvin\Documents\Python Programs\Test_game_example.py", line 36, in __init__
    self.char_sprite = canvas.create_image(image=self.tkimage)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 2310, in create_image
    return self._create('image', args, kw)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 2294, in _create
    cnf = args[-1]
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)

请帮忙!

aba*_*ert 5

问题是create_image需要一个position。像这样:

self.char_sprite = canvas.create_image((0, 0), image=self.tkimage)
Run Code Online (Sandbox Code Playgroud)

如果以更友好的方式定义了Tkinter,则会收到一条友好的错误消息:

>>> def create_image(position, **options):
...     pass
>>> create_image(image=0)
TypeError: create_image() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

不幸的是,Tkinter的底层通常有点复杂,因此它的定义更像这样:

>>> def create_image(*args, **options):
...     position = args[-1]
...     pass
Run Code Online (Sandbox Code Playgroud)

因此,您会收到一条不太有用的错误消息。在*args结束了一个空的元组,以便position = args[-1]引发IndexError。当然,该变量甚至都没有被调用position,但是cnf,它并不能帮助您理解问题。

但这是同样的问题。您忘记了position论点。