为什么我会得到索引器错误:列表索引超出范围。当列表索引不能超出范围时?

2024-09-28 18:14:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在制作一个骰子游戏,当我把图像分配给每个Tkinter标签以便骰子显示时,我开始得到这个错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1486, in __call__
    return self.func(*args)
  File "C:/Users/Logan/Desktop/Dice/dicelab2.py", line 56, in rollDice
    self.dice[i].roll()
  File "C:/Users/Logan/Desktop/Dice/dicelab2.py", line 35, in roll
    self.display.config(image=Photolist[self.value-1])
IndexError: list index out of range

现在这个列表有6个条目,我从self调用它。价值观。自我价值应该是1到6之间的随机整数。在我调用它之前,我减去1,这样它应该在Photolist的索引内。还有什么会导致这个错误? 我的代码是:

^{pr2}$

Tags: inpyselftkinterlib错误linecall
1条回答
网友
1楼 · 发布于 2024-09-28 18:14:58
import Tkinter
import random
# PhotoList = [] you are accessing this

class Die(object):
    def __init__(self,frame):
        self.value = random.randint(1,6)
        print self.value
        photo1=Tkinter.PhotoImage(file="1.gif")
        photo2=Tkinter.PhotoImage(file="2.gif")
        photo3=Tkinter.PhotoImage(file="3.gif")
        photo4=Tkinter.PhotoImage(file="4.gif")
        photo5=Tkinter.PhotoImage(file="5.gif")
        photo6=Tkinter.PhotoImage(file="6.gif")
        # make it an attribute 
        self.Photolist=[photo1,photo2,photo3,photo4,photo5,photo6] 

        self.display = Tkinter.Label(frame,
          image=self.Photolist[self.value-1],
          font=('Courier New',30),
          relief='ridge',
          borderwidth=5,
          bg='white')
        self.display.pack(side='left')

    def roll(self):
        self.value = random.randint(1,6)
        print self.value
        self.display.config(image=self.Photolist[self.value-1])

在您的代码中,Photolist = []所以您试图访问空列表而不是类中的列表,我将其更改为一个属性,这样您现在应该没有问题了

相关问题 更多 >