Ошибка в PyGame
Вот код:
from os import getcwd
import pygame
import random
link_to_files = getcwd() + "\\files\\"
#Цвета
color= {
"white":(255,255,255),"black":(0,0,0),"red":(255,0,0),
"green":(0,255,0),"blue":(0,0,255)
}
#Параметры окна:
#Размер = ширина, высота = (400, 300)
size = width, height = (500,500)
#Создаём экран (холст)
screen = pygame.display.set_mode(size)
pygame.init()
def draw_widgets():
screen.fill(color['white'])
#screen.fill(pygame.Color('red'), pygame.Rect(230,230,40,40)) Rect(x,y, width, height )
for i in range(10000):
screen.fill(pygame.color['blue'],(random.random() * width,random.random() * height))
draw_widgets()
while pygame.event.wait().type != pygame.QUIT:
pygame.display.flip()
pygame.quit()
Вот текст ошибки:
C:\Users\Admin\Desktop\Tests>python main.py
pygame 2.0.1 (SDL 2.0.14, Python 3.8.6)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "main.py", line 29, in <module>
draw_widgets()
File "main.py", line 27, in draw_widgets
screen.fill(pygame.color['blue'],(random.random() * width,random.random() * height))
TypeError: 'module' object is not subscriptable
Ответы (2 шт):
Попробуйте вместо pygame.color['blue'] использовать pygame.Color('blue')
В pygame color действительно является модулем (т.е. файлом color.py), и у него есть класс Color, который и нужно использовать
Не совсем понятна идея кода так как про нее ничего не написано. Предпологаю что нужно вывести 10000 синих прямоугольников чтобы они залили весь экран.
C учетом что массив цветов уже задан нужно его и использовать, иначе pygame.Color(цвет),
Заливка fill вторым параметром требует прямоугольник т.е. 4 значения: [x, y, w, h]
Если нужно сделать эффект заливки пикселями можно попробовать такие прямоугольники:
[align(random.random() * (width + 1)), align(random.random() * (height +1)), 5, 5]
функция выравнивания будет такой:
def align(value):
return value - value % 5
чтобы видеть динамические изменения нужно вызывать обновление экрана вручную:
pygame.display.flip()
Далее идет исправленный исходный код (с заливкой не пикселями так как в вопросе не указано что именно должна делать программа).
from os import getcwd
import pygame
import random
link_to_files = getcwd() + "\\files\\"
#Цвета
color = {
"white":(255,255,255),"black":(0,0,0),"red":(255,0,0),
"green":(0,255,0),"blue":(0,0,255)
}
#Параметры окна:
#Размер = ширина, высота = (400, 300)
size = width, height = (500,500)
#Создаём экран (холст)
screen = pygame.display.set_mode(size)
pygame.init()
def draw_widgets():
screen.fill(color["white"])
for i in range(10000):
screen.fill(color["blue"], [0, 0, random.random() * (width + 1) , random.random() * (height +1) ])
pygame.display.flip() # для того чтобы видеть обновления
draw_widgets()
while pygame.event.wait().type != pygame.QUIT:
pygame.display.flip()
pygame.quit()
заливка будет с левого верхнего угла:

