Ошибка переполнения стека (0xC0000409) в приложении для рисования Python с чувствительным к давлению стилусомPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка переполнения стека (0xC0000409) в приложении для рисования Python с чувствительным к давлению стилусом

Сообщение Anonymous »

Я разрабатываю приложение для рисования на Python, и все работает без проблем при вводе с помощью мыши. Однако, когда я использую чувствительный к давлению стилус, приложение через некоторое время вылетает со следующей ошибкой:
Процесс завершен с кодом выхода -1073740791 (0xC0000409)
Я понимаю, что эта ошибка вызвана переполнением стека, но я дважды проверил свой код и не могу определить, где может произойти утечка памяти. Я сузил проблему до нескольких функций событий, которые обрабатывают ввод с помощью мыши и стилуса.

Код: Выделить всё

def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.mousedown = True
x, y = event.pos().x(), event.pos().y()
if y >= self.height() - 80:
for rect, colour in self.palette_rects:
if rect.collidepoint(x, y):
self.selected_colour = colour
print(f"Selected colour: {self.selected_colour}")
break
else:
self.shade = self.selected_colour
elif event.button() == Qt.RightButton:
self.mousedown = True
self.shade = self.backdrop

def mouseMoveEvent(self, event):
if self.mousedown:
spot = (event.pos().x(), event.pos().y())
adjusted_radius = int(self.radius * self.pen_pressure)
pygame.draw.circle(self.transparent_surface, self.shade, spot, adjusted_radius)
self.update()
print(f"Spot: {spot}, Radius: {adjusted_radius}")

def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton or event.button() == Qt.RightButton:
self.mousedown = False

def keyPressEvent(self, event):
print(f"Key pressed: {event.key()}")
if event.key() == Qt.Key_Q:
self.close()
Основной цикл выглядит следующим образом:

Код: Выделить всё

if __name__ == '__main__':
app = QApplication(sys.argv)

if not check_license():
sys.exit()  # Exit the app if the license is not valid

window = SketchWidget()
window.resize(800, 800)
window.show()

try:
while True:
window.update()
window.clock.tick(60)  # Limit the frame rate to 60 FPS
if not app.exec_():
break
except Exception as e:
print(f"An error occurred: {e}")
finally:
pygame.quit()  # Clean up Pygame before exiting
sys.exit()
Особое внимание я уделяю функции mouseMoveEvent, поскольку она включает в себя чувствительность к давлению, что со временем может влиять на память. Есть какие-нибудь советы по предотвращению переполнения стека при вводе стилусом или по возможным проблемам с памятью в коде?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -sensitive
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»