Come mettere una finestra di tkinter sopra le altre?

2022-07-29 11:30:10

Sto usando Python 2 con Tkinter e PyObjC, quindi sto usando py2app.

Il programma funziona correttamente, ma la finestra viene visualizzata come nascosta ogni volta che apro il programma, quindi non viene visualizzata finché non faccio clic sull'icona sul dock per visualizzarla.

C'è un modo per controllare questo, fare in modo che la finestra sia sopra le altre finestre che erano aperte all'avvio dell'applicazione?

Giusto per chiarire, non è necessario che sia in primo piano per tutto il tempo in cui l'applicazione è in esecuzione. Ho solo bisogno che sia in cima alle altre finestre all'avvio.

- Dennis

Source
Risposta


32
  • Se prendo il codice che mi dai e aggiungo la prima e l'ultima riga che ottieni:

    from tkinter import *
    
    root = Tk() 
    root.title("app")
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    root.geometry("550x250+%d+%d" % (screen_width/2-275, screen_height/2-125))
    root.configure(background='gold')
    root.lift()
    
    mainloop()
    

    Prova. Ottengo la finestra come previsto. Prendi qualcos'altro? Se funziona, da qualche parte nel codice gli stai dicendo di farlo. Se fa la stessa cosa del tuo vero programma, allora il tuo window manager lo sta facendo. Questo è il meglio che posso fare senza ulteriori informazioni.

    Modifica:

    Su OSX (soprattutto versioni che usano aqua) le finestre di tkinter potrebbero essere visualizzate dietro quelle già aperte (questo ha un bug report qui: http://bugs.python.org/issue9384 ma è stato chiuso perché non risolverà). L'aggiunta del comando root.lift() è stata inclusa per portare la finestra in cima allo stack in quei casi ed è innocua in tutti gli altri.