1

I'm creating a game with pygame and I'm using ConfigParser to parse various things for map tiles. But when I get to the part where I do

parse.read(filename)

It outputs this error

self.level = self.config.get("level","map")
    AttributeError: 'list' object has no attribute 'get'

I'm guessing parse.read(filename) returned a list instead of its intended object. Here is my code I suppose. I've been searching google but couldn't find anything related to this.

import pygame
import ConfigParser

parse = ConfigParser.ConfigParser()

class MakeLevel():
    def MapMake(self,spriteList,filename):
        self.config = parse.read(filename)
        self.level = self.config.get("level","map")
        self.LegendDict = self.config.get("dictionary")
        self.Proper = []
        self.newTile = None
        self.x = 0
        self.y += 50
        #Get propper legend stats
        for items in LegendDict:
            for row in level:
                for col in row:
                    if col == items:
                        #LegendDict[items]
                        self.image = self.config.get(items, "image")
                        self.newTile =  MapTile(self.image,self.x,self.y)
                        return spriteList.add(self.newTile)
                x += 50
            y += 50
            x = 0


class MapTile(pygame.sprite.Sprite):
    def __init__(self,image,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(image)
        self.rect = Rect(x, y, 32, 32)


class Controller():
    def __init__(self):
        pass

    def Keys(self):
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    return 'a'
                if event.key == pygame.K_d:
                    return 'd'

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_a:
                    return 'a up'
                if event.key == pygame.K_d:
                    return 'd up'

AllSprites = pygame.sprite.Group()

makeLevel = MakeLevel()

makeLevel.MapMake(AllSprites,"level1.ini")

AllSprites.draw()

I also tried opening the file beforehand and it still did not work.

mapFile = open("level1.ini")
makeLevel.MapMake(AllSprites, mapFile)

I made sure the level1.ini file is in the same folder as the main.py file. Hopefully the problem isn't something so obvious.

1 Answer 1

3

ConfigParser.read returns a list of filenames successfully parsed, so in your example, self.config is a list of filenames -- likely ['level1.ini']. After parsing, you probably want to .get from the parser. Something similar to this:

    def MapMake(self,spriteList,filename):
        parse.read(filename)
        self.level = parse.get("level", "map")
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.