Focus perso Finestra non risponde

di il
5 risposte

Focus perso Finestra non risponde

Il programma si apre con una finestra e subito viene eseguita una def. Per far ciò:
alla fine del listato:

# Da qui faccio partire la def
cmdProssimi()
if __name__ == "__main__":
app.mainloop()
#cmdProssimi() anche da qui si apre e funziona. Sostitendo ad app.mainloop

La def mi mostra un messagebox.askyesno("","") .Se rispondo si, Ok fa un certo lavoro e alla fine torna alla finestra madre. Se invece dico no, vado, sì, direttamente alla finestra, ma questa rimane come se fosse disabilitata, cioè cliccando su tutta la sua superficie o su un campo, non risponde. Se però clicco il pulsante, "Open Folder",per esempio, che mi apre una cartella, allora, dopo, la finestra diventa sensibile e posso posizionarmi sul campo. Ma senza il focus txtNome.focus_set() che gli avevo dato alla uscita della def. (cliccando sul pulsante "clear" che pulisce i campi, la finestra continua a rimanere insensibile "disabled")
Naturalmente se tolgo da quella posizione la def cmdProssimi(), tutto funziona regolarmente.
Per capire, il programma è una registrazione di nomi e di date di nascita ed altro. Appena si lancia il programma, subito dopo l'apparire della finestra, compare il messagebox con tutte le date dei compleanni che si verificheranno entro i prossimi trenta giorni. Grazie

5 Risposte

  • Re: Focus perso Finestra non risponde

    Ciao,
    non riesco a capire perfettamente ciò di cui hai bisogno.
    Ho capito che:
    all'avvio del programma, si apre una popup (askyesno());
    cliccando "yes" funziona correttamente;
    invece, cliccando "no", il popup si chiude ma la finestra resta disabilitata, giusto?

    Se è così, potrebbero esserci innumerevoli motivi per non funzionare... pertanto, riusciresti a condividere, anche solo in parte, il tuo script? in modo da rendere più facile la risoluzione del problema.
  • Re: Focus perso Finestra non risponde

    Il programma termina così :

    #-----------------------------------------------------
    # Da qui faccio partire la def cmdProssimi() che viene eseguita subito dopo l'apertura della maschera/finestra
    cmdProssimi() # <---------------------------------PIETRA DELLO SCANDALO
    if __name__ == "__main__":
    app.mainloop()
    #----FINE DEL PROGRAMMA ------
    Il messagebox.askyesno("","") che compare all'avvio attende una conferma. Si/No.
    Se dico Sì, crea un file text e me lo fa vedere e quando lo chiudo nella X, il focus compare pulsante sul campo che ho scelto. Ma comunque già alla comparsa del file text, il cursore del mouse può già selezionare i campi di input.

    Se, invece, dico no, il messageBox scompare e però il cursore del mouse che clicca affannosamente sui campi input, non
    riesce a selezionarne neppure uno. la Finestra pare sia bloccata.

    Naturalmente se tolgo da quella posizione il cmdProssimi(), allora tutto torna a funzionare perfettamente.
    Ho schitto lil medesimo programma in Javascript e, ovviamente, non si verificano problemi.

    Il file è lungo e complesso con un archivio abbastanza corposo, ma penso che facendo eseguire una def nel punto in cui io l'ho messa, succeda sempre la stessa cosa.
    Probabilmente c'è un altro modo per far eseguire una def alla apertura del programma. Ma io non lo conosco.
    Grazie per la pazienza e cordialmente saluto
  • Re: Focus perso Finestra non risponde

    Se il problema è una funzione... in quel caso potresti:
    1) Usare i Thread. Qui la tua funzione verrà eseguita "contemporaneamente" al ciclo di vita di Tkinter;
    2) Richiami la funzione attraverso il metodo after di qualunque widget di Tkinter:
    def cmdProssimi():
    	...
    	#app.after(100, cmdProssimi)
    
    if __name__=='__main__':
    	app.after(100, cmdProssimi)
    	app.mainloop()
    NB: se la finestra non risponde, potrebbe essere per qualche ciclo interno alla funzione che vai a richiamare; infatti, per """far funzionare""" una finestra di Tk, hai bisogno di richiamare il metodo mainloop; questo è come un ciclo infinito interno che termina solo alla chiusura della finestra stessa; pertanto, se nel tuo programma hai un ciclo che itera molto, o che intera all'infinito, potresti avere seri problemi con le finestre in questione.

    Se il problema persiste, dovrei vedere il codice per poterti dire se c'è un errore.
  • Re: Focus perso Finestra non risponde

    Si, Funziona.
    Però il messageBox riappare una seconda volta dopodichè in focus è sul campo giusto. Grazie comunque. Ho imparato un'altra cosa che non sapevo.
  • Re: Focus perso Finestra non risponde

    Ce ne hai messo a rispondere ... .. appena 4 mesi ...
Devi accedere o registrarti per scrivere nel forum
5 risposte