Python类型错误:';非类型';对象没有属性'__获取项目';
我不太清楚这里发生了什么。我试图让它播放声音时,最黑暗的部分饲料从我的网络摄像头是在一个特定的位置显示。当我运行它时,我得到了这个错误 文件“/home/phur/Documents/052617/052617.py”,第42行,钢琴曲 如果par[100200]==surface.map_rgb((0,0,0)): TypeError:“非类型”对象没有属性“getitem” (0,0) 这是我的密码: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
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个循环对于该问题是不必要的。设置标题和打印鼠标位置这样的小事也可以删除。完整且可验证的部分仅用于演示;这是一个关于如何最小化代码的示例(我还提供了一些其他有用的注释,但它们不应该出现在实际问题中)。