Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类型错误:';非类型';对象没有属性'__获取项目';_Python_Pygame - Fatal编程技术网

Python类型错误:';非类型';对象没有属性'__获取项目';

Python类型错误:';非类型';对象没有属性'__获取项目';,python,pygame,Python,Pygame,我不太清楚这里发生了什么。我试图让它播放声音时,最黑暗的部分饲料从我的网络摄像头是在一个特定的位置显示。当我运行它时,我得到了这个错误 文件“/home/phur/Documents/052617/052617.py”,第42行,钢琴曲 如果par[100200]==surface.map_rgb((0,0,0)): TypeError:“非类型”对象没有属性“getitem” (0,0) 这是我的密码: import pygame import pygame.camera from pygam

我不太清楚这里发生了什么。我试图让它播放声音时,最黑暗的部分饲料从我的网络摄像头是在一个特定的位置显示。当我运行它时,我得到了这个错误

文件“/home/phur/Documents/052617/052617.py”,第42行,钢琴曲 如果par[100200]==surface.map_rgb((0,0,0)): TypeError:“非类型”对象没有属性“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

据报道。首先,您应该为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.\uuu init\uuuu()
是可疑的。
如果你好奇的话,这里有一个很好的解释,说明Surface是一个类,所以它应该是
pygame。Surface(大小)
谢谢,修复了它!欢迎来到Stackoverflow!当询问代码中的错误时,您应该始终创建一个。通过这样做,你可以使问题更容易理解,更容易给出一个好的答案,对未来的读者更有价值,在大多数情况下,你甚至可以自己在这个过程中发现错误。要创建一个应用程序,首先需要删除冗余代码。错误在第一个for循环中,因此剩余的3个循环对于该问题是不必要的。设置标题和打印鼠标位置这样的小事也可以删除。完整且可验证的部分仅用于演示;这是一个关于如何最小化代码的示例(我还提供了一些其他有用的注释,但它们不应该出现在实际问题中)。