该程序应该在画布上放置一个精灵,以便用户使用向左和向右箭头键进行控制,但是我一直在获取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)
请帮忙!
问题是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论点。
| 归档时间: |
|
| 查看次数: |
2598 次 |
| 最近记录: |