A ver si me explico, que soy muy malo para eso.
Tenía una clase. Digamos
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super().__init__(parent, title=title, size=(1200, 800))
# panel and sizers
self.panel = wx.Panel(self)
…
Def run(self, params):
# método de ejemplo ya que el otro es muy largo de escribir, pero probé con este hasta que di con la solución para este y por lo tanto para el otro.
For r in range(100000000):
R
winsound.PlaySound(endsound, winsound.SND_FILENAME | winsound.SND_ASYNC) # sonido para probar ya que nvda no servía.
Desde esa clase principal ejecutaba el método run que tenía una iteración larga que congelaba el proceso.
Así que separé el método en otra clase.
Class AnotherProcess (threading.Thread):
def __init__(self, parent):
…
Def run(self,params):
Pero aun que ahora el resto de la aplicación seguía ejecutándose sin congelarse, hice prints en la consola para probar, nvda se seguía congelando.
Llamaba a run desde on_button_press(self, event):
Algo como another = AnotherProcess(self)
Another.run(params, event)
Al final regresé run a la clase principal, Myframe y lo ejecuté con:
api_thread = threading.Thread(target=self.run, args=(params,event))
api_thread.start()
Se tardó como 20 segundos en reproducir el sonido, pero en ese tiempo pude interactuar con los distintos botones y cosas de la Ventana sin que nvda molestara.
Reemplacé el run por el largo de escribir y solucionado.