Al hacer click en un botón, mi código bloquea la interfaz entera.
Este es mi código:
from pynput.keyboard import Key, Listenerfrom pynput.keyboard import Key, Controllerfrom pynput import keyboard as kbimport timeimport sysfrom PySide6.QtUiTools import QUiLoaderfrom PySide6.QtWidgets import QApplication, QDialogfrom PySide6.QtCore import QFileclass EasyKey: def __init__(self): super(EasyKey, self).__init__() self.ui = QUiLoader().load(QFile("Edit.ui")) self.ui.Apply.clicked.connect(self.iniciar) # llamada a al funcion iniciar def iniciar(self): teclashu = Controller() tecla = Controller() selecion = ( self.ui.HotkeyNum.text() ) # varibles guardadas por datos introducidos por el usuario selecion_2 = selecion.swapcase() edic = self.ui.editionNum.text() selec = self.ui.EditionSelecNum.text() delay = int(self.ui.DelayNum.text()) delay = delay / 1000 def edit(key): # funcion que recibe un parametro de teclado ingresado if (key == kb.KeyCode.from_char(selecion)) or ( key == kb.KeyCode.from_char(selecion_2) ): # Si "key" ingresado por el usario es igual a la variable asignada por el usuario tecla.press(edic) time.sleep(delay) teclashu.press(selec) time.sleep(delay) if key == Key.delete: return False def soltar(key): if key == kb.KeyCode.from_char(selec): tecla.release(edic) time.sleep(delay) teclashu.release(selec) time.sleep(delay) with Listener( on_press=edit, on_release=soltar ) as listener: # ojente por teclado que llama a las funciones cada ves que se cumple la condicion del "key" listener.join()if __name__ == "__main__": app = QApplication(sys.argv) myapp = EasyKey() myapp.ui.show() sys.exit(app.exec())
Esto sería el programa:
Introduzco valores en las columnas de la izquierda, y pulso en Apply entonces se queda colgado..
No domino mucho Python, pero esto en C# se puede solucionar con un thread o un background worker. El caso es que en Python no conozco la forma de hacer eso.
Como puedo hacer para que no se bloquee al hacer click?