When i launch a pyqt6 qmessagebox from a function called by a watchdog event my program crashes

27 Views Asked by At

qmessagebox pops up incomplete, title with text "(Not respondig)" besides and no main text into box python pyqt6 and watchdog upgraded 04/08/2023

my code:

`import sys
import os
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

# Clase para manejar los eventos de cambio de archivo o directorio
class Handler(FileSystemEventHandler):
    def __init__(self, observer):
        self.observer = observer
        super().__init__()

    def on_created(self, event):
        # Detener el observador
        self.observer.stop()
        self.observer.unschedule_all()
        # Mostrar mensaje de archivo creado
        QMessageBox.information(None, "Archivo creado", f"Se creó el archivo: {event.src_path}")

    def on_modified(self, event):
        # Detener el observador
        self.observer.stop()
        self.observer.unschedule_all()
        # Mostrar mensaje de archivo modificado
        QMessageBox.information(None, "Archivo modificado", f"Se modificó el archivo: {event.src_path}")

class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'Watchdog App'
        self.left = 100
        self.top = 100
        self.width = 300
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Botón para iniciar el watchdog
        self.btn_start = QPushButton('Iniciar', self)
        self.btn_start.move(50, 50)
        self.btn_start.clicked.connect(self.start_watchdog)

        # Botón para detener el watchdog
        self.btn_stop = QPushButton('Detener', self)
        self.btn_stop.move(150, 50)
        self.btn_stop.clicked.connect(self.stop_watchdog)

        self.show()

    def start_watchdog(self):
        # Directorio para monitorear
        path = os.path.join(os.getenv("USERPROFILE"), "Downloads")
        # Crear una instancia del observador y el manejador de eventos
        self.observer = Observer()
        self.event_handler = Handler(self.observer)
        # Asignar el observador al manejador de eventos y empezar a monitorear
        self.observer.schedule(self.event_handler, path, recursive=True)
        self.observer.start()
        print(f"Watchdog activo: {self.observer.is_alive()}")

    def stop_watchdog(self):
        # Detener el observador
        self.observer.stop()
        self.observer.unschedule_all()
        self.observer.join()
        print(f"Watchdog activo: {self.observer.is_alive()}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec())`

i ve tried to launch same function from a button to evaluate behavior. result: the problem does not repeat. note: watchdog was still runing but no events raised conclusion: the problem appears only when function is called by a watchdog event

0

There are 0 best solutions below