Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445

    [PYTHON] Callback da un thread

    Sto realizzando un software che serve a visualizzare il contenuto di file GCODE, in pratica sono una serie di istruzioni per una macchina a controllo numerico che definiscono il movimento dell'utensile. Il software visualizza il percorso che definisce la lavorazione.
    Premetto che funziona tutto, ma verrei aggiungere una funzionalità.

    Attualmente l'immagine generata viene visualizzata su una QGraphicsScene e ridimensionata per essere mostrata il più grande possibile.
    Quando si ridimensiona la finestra, si ridimensiona anche l'area della scena, vorrei che di conseguenza si ridimensionasse anche il disegno visualizzato.
    Farlo non sarebbe un problema, mi basta ricalcolare il fattore di scala e rigenerare il disegno.
    Il problema è che se si ridimensiona la finestra tarascinando l'angolo in basso a destra, sarebbe un continuo ridimensionamento del disegno. Ho intenzione invece di attivare il ridimensionamento solo dopo x secondi che non c'è più un cambio di dimensione della finestra principale.

    Per farlo avrei intenzione di usare un timer avviato in un thread appena la finestra viene ridimensionata, se la finestra cambia ancora dimensioni prima dello scadere degli x secondi, il timer va resettato, se invece scadono gli x secondi, deve essere chiamato il metodo draw() che rigenera il disegno.

    Nel codice che ho scritto è quasi tutto impostato, c'è anche una classe per gestire il timer, mi mancano le conoscenze per dichiarare il timer nella classe MainWindow, che è quella che gestisce tutto, e nella classe del timer poter chiamare il metodo draw() di MainWindow per rigenerare il disegno.

    Sapreste aiutarmi?

    Qui sotto il link al codice del software in questione.
    C'è anche un esempio di file GCODE per fare prove, è il file .PGR

    https://github.com/LuigiCaradonna/isoviewer

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Aggiornamento: ho capito come dichiarare il timer, avviarlo ed attivare il metodo draw() al suo scadere.

    Ho però un problema: allo scadere del timer viene avviato il metodo draw() che rigenera il disegno, ma prima di completare le operazioni il programma si chiude.
    Nella console non appare alcun messaggio d'errore o eccezzione, semplicemente sembra che il programma termini.

    Se disabilito il timer e rigenero il disegno a mano ricliccando sul pulsante "Elabora" (che attiva lo stesso metodo draw() ), il disegno viene rigenerato regolarmente e si può continuare ad usare il programma, quindi sono abbastanza certo che il problema sia generato dal timer che allo scadere fa chiudere tutto, ma non capisco come e quindi neanche come intervenire per impedirglielo.

    Il timer viene instanziato nel costruttore della classe MainWindow ed avviato/resettato nel metodo resizeEvent() mediante il metodo timerManager(). Lo stop è invece gestito direttamente nel metodo run() della classe ResettableTimer()

    Il codice su Github è aggiornato, se volete potete darci un'occhiata per vedere se capite dove mi si genera il problema.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Risolto con un QTimer invece della classe che stavo usando.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.