nonlocal declaration not allowed at module level , почему вызывается данная ошибка
Не знаю почему , но выводиться данная ошибка , если я уберу nonlocal pos , то программа просто не будет понимать что такое pos ( P.S : global pos , в данном случай не работает )
import pygame
import sys
sc = pygame.display.set_mode((600,400) , pygame.RESIZABLE)
pygame.display.set_caption("Game")
FPS = pygame.time.Clock()
Blue = (0,0,255)
White = (255,255,255)
x = 300
y = 200
speed = 5
Running = True
move = 0
flStartDraw = False
sp = None
sc.fill(White)
pygame.display.update()
**текст, выделенный жирным шрифтом**
while Running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
flStartDraw = True
sp = event.pos
if event.type == pygame.MOUSEMOTION:
if flStartDraw:
nonlocal pos
pos = event.pos
width = pos[0] - sp[0]
height = pos[1] - sp[1]
sc.fill(White)
pygame.draw.rect(sc, Blue , (sp[0] , sp[1],width,height))
pygame.display.update()
if pos[0] - sp[0] <= 0:
width = sp[0] - pos[0]
height = pos[1] - sp[1]
pygame.draw.rect(sc, Blue , (pos[0] , sp[1] , width , height))
if event.type == pygame.MOUSEBUTTONUP and event.type == 1:
flStartDraw = False
FPS.tick(60)
Ответы (2 шт):
Оператор nonlocal пытается вывести переменную pos в глобальную область видимости, что ему не разрешено по документации. См. https://docs.python.org/3/reference/simple_stmts.html#nonlocal Попробуй global.
nonlocal pos тут вообще не нужно. У вас проблема в другом - в том, что переменная pos ничем не инициализирована в самом начале. Я бы предложил её инициализировать None, так же, как вы делаете с переменной sp:
sp = None
pos = None # <- добавлено
И далее прежде чем использовать значение pos проверяйте сначала, что там не None:
if pos != None and pos[0] - sp[0] <= 0:
^^^^^^^^^^^^^^^ вот эта проверка добавлена в if
Сейчас у вас при движении мыши управление попадает в этот if когда переменная pos вообще не задана, там ничего нет. Инициализация pos каким-то значением происходит только после нажатия кнопки мыши.