繁体   English   中英

Python TypeError:“ NoneType”对象没有属性“ __getitem__”

[英]Python TypeError: 'NoneType' object has no attribute '__getitem__'

我不太确定这是怎么回事。 当网络摄像头的Feed中最暗的部分位于显示屏中的特定位置时,我试图使其发出声音。 当我运行它时,出现此错误

如果par [100,200] == surface.map_rgb((0,0,0)),则钢琴中的文件“ /home/phur/Documents/052617/052617.py”,第42行,钢琴:TypeError:“ NoneType”对象具有没有属性' getitem '(0,0)

这是我的代码:

import pygame
import pygame.camera
from pygame.locals import *
import time
import random
import Image

pygame.init()
pygame.camera.init()


size = (640, 480)

md = pygame.display.set_mode(size, 0)
pygame.display.set_caption("Piano")


def piano():

    stop_playing = False

    camera = pygame.camera.Camera('/dev/video0', size)
    camera.start()

    while not stop_playing:

        captured = camera.get_image(md)
        md.blit(captured, (0, 0))
        pygame.display.flip()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                stop_playing = True

        mp = pygame.mouse.get_pos()
        par = pygame.PixelArray.surface.__init__()

        print mp

        for x in range(0, 213):
            for y in range(0, 240):
                if par[x, y] == pygame.surface.map_rgb((0, 0, 0)):
                    pygame.mixer.music.load("C1.wav")
                    pygame.mixer.music.play()
                    time.sleep(1)
        for x in range(214, 426):
            for y in range(0, 240):
                if par[x, y] == pygame.surface.map_rgb((0, 0, 0)):
                    pygame.mixer.music.load("D1.wav")
                    pygame.mixer.music.play()
                    time.sleep(1)
        for x in range(427, 640):
            for y in range(0, 240):
                if par[x, y] == pygame.surface.map_rgb((0, 0, 0)):
                    pygame.mixer.music.load("E1.wav")
                    pygame.mixer.music.play()
                    time.sleep(1)
        for x in range(0, 320):
            for y in range(241, 480):
                if par[x, y] == pygame.surface.map_rgb((0, 0, 0)):
                    pygame.mixer.music.load("F1.wav")
                    pygame.mixer.music.play()
                    time.sleep(1)
        for x in range(321, 640):
            for y in range(241, 480):
                if par[x, y] == pygame.surface.map_rgb((0, 0, 0)):
                    pygame.mixer.music.load("G1.wav")
                    pygame.mixer.music.play()
                    time.sleep(1)

piano()
quit()

看来您没有正确初始化pygame.PixelArray

根据pygame像素数组doc示例 首先,您应该创建一个表面或屏幕以供python显示。

size = (640, 480)
md = pygame.display.set_mode(size, 0)
surface = pygame.Surface(size)

接下来,在您的piano()函数中:

# create pixel array
par = pygame.PixelArray(surface)

通常,您不应该使用双前划线和双后划线下划线功能。 在这种情况下,您的par = pygame.PixelArray.surface.__init__()是可疑的。 如果您感到好奇,这里有一个很好的解释,说明为什么某些函数在python中带有下划线

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM