2017-05-28 152 views
0

我不太確定這裏發生了什麼。當我的網絡攝像頭中最黑暗的部分位於顯示器的特定位置時,我試圖讓它播放聲音。當我運行它時,我得到這個錯誤Python TypeError:'NoneType'對象沒有屬性'__getitem__'

文件「/home/phur/Documents/052617/052617.py」,第42行,鋼琴 如果par [100,200] == surface.map_rgb((0, 0,0)): 類型錯誤: '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() 
+0

歡迎來到Stackoverflow!當在代碼中詢問有關錯誤的問題時,您應該始終創建一個[mcve]。通過這樣做,您可以使問題更易於理解,更容易給出明智的答案,對未來的讀者更有價值,並且在大多數情況下,您甚至可以在此過程中自己發現錯誤。要創建[mcve],首先需要刪除多餘的代碼。錯誤是在第一個for循環中,所以剩餘的3個循環對於這個問題是不必要的。像設置標題和打印鼠標位置這樣的小東西也可以被刪除。完整的和可驗證的部分是好的 –

+1

只是爲了演示; [這裏](https://hastebin.com/upociwikus.py)就是你如何儘量減少代碼的一個例子(我還提供了一些額外的有用評論,但它們不應該成爲實際問題)。 –

回答

0

看起來你不初始化你的pygame.PixelArray正確。

根據pygame pixel array doc example。首先,你應該創建一個表面或屏幕來顯示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__()是可疑的。 如果你好奇這裏有一個很好的解釋why some functions have underscores in python

+0

表面是一個類,所以它應該是'pygame.Surface(大小)' –

+0

謝謝,修復它! – Skam

相關問題