Я не совсем знаком с Pygame, поэтому следующий базируются полностью от моего знания других обработчиков событий.
Как обычно работают обработчики событий, их функция выполняется раз за новое событие. Во время этого дескриптора они не реагируют на новые события. Поскольку MOUSEBUTTONUP станет новым событием, вам придется обрабатывать его отдельно.
Обработчик событий не может сделать так, как вы в настоящее время настроили свой код, так как он застрял в обработке MOUSEBUTTONDOWN, замерзая окно.
Теперь я предполагаю, что либо MOUSEBUTTONDOWN получает бросок (с определенным интервалом между ними), пока нажата кнопка, либо есть другое событие, которое это делает. Если это так, вы можете просто выполнить свой код один раз за одно событие, оставив цикл.
В противном случае вы можете запустить новый поток, который будет зацикливать ваш код, в то время как некоторая переменная истинна. Затем вы можете установить эту переменную в false в вашем обработчике MOUSEBUTTONUP.
Определить это вне обработчика событий:
import thread
mouse_pressing = True
def mouse_pressing_func():
while mouse_pressing:
# Do fancy stuff
Затем использовать это в обработчике событий:
elif event.type == MOUSEBUTTONDOWN and event.button == 3:
mouse_pressing = True
thread.start_new_thread(mouse_pressing_func,())
elif event.type == MOUSEBUTTONUP and event.button == 3:
mouse_pressing = False
Edit:
Теперь, когда отступы Решенные, я вижу что у вас есть еще одна проблема: вы даже не проверяете, является ли событие MOUSEBUTTONUP в вашем цикле, но потом. Это означает, что вы никогда не достигнете этого утверждения.
Существуют различные способы интерпретации этого кода в зависимости от отступа, пожалуйста, исправьте его. Кроме того, публикация содержит разделы, которые не имеют отношения к вопросу, пожалуйста, удалите их. – XORcist
@ möter: вставляемый код использовал вкладки; Я заменил их пробелами. –
Кажется, что ваш 'while press:' loop блокирует поток событий. – Sinkingpoint