Berechtigung Fensterreihenfolge

Fragen zu Tkinter.
Antworten
jake-the-snake

Samstag 20. Januar 2018, 20:45

Abend Forum

Ich habe Verständnisprobleme mit der Berechtigungsnummer für den Hintergrung/Vordergrund.
Wenn ich die Nummer von -topmost, "1" auf "2", "0", oder "0.5" setze, scheint das in keinem Fall den absoluten Vortritt vor anderen Fenstern zu setzen.

Aber nun von Anfang an:

Bisher hatte ich ein Hauptfenster, welches im absoluten Vordergrund läuft, weil es in einem Kiosk-System so gewollt ist.
Neu dazu soll eine Anzeige, also ein neues Fenster, welches vor dem Hauptfenster sein soll. Setze ich eine Meldung mit messagebox ab, erscheint diese im Vordergrund - noch vor dem Hauptfenster. Klicke ich bei angezeigter messagebox auf das dahinter liegende Hauptfenster, bleibt die messagebox weiter im Vordergrund. Das ist so tip-top und gut!

Wenn ich jetzt ein eigenes Toplevel-Fenster erstelle, ist das bei Aufruf auch vor dem Hauptfenster. Klicke ich aber auf das Hauptfenster, verschwindet das neue Toplevel-Fenster hinter das Hauptfenster. Das sollte nicht sein!

Warum bewirken die Zahleinstellungen (Fett gedruckt) nach "top.attributes("-topmost", 1)" keine Verhaltensänderung?

Hier mal mein Testgebilde:

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from tkinter import *
from tkinter import messagebox
from tkinter.scrolledtext import ScrolledText

top = Tk(className=" Spinner-Bar-Anzeige")
top.geometry("300x300")
top.attributes("-topmost", 1)

# Fenster-Titel
root = Tk(className=" Hauptfenster mit Aktivität")
root.resizable(FALSE,FALSE)
root.attributes("-topmost", 1)
root.wm_attributes('-type', 'splash')

def center_window(width=300, height=200):
    # get screen width and height
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()

    # calculate position x and y coordinates
    x = (screen_width/2) - (width/2)
    y = (screen_height/2) - (height/2)
    root.geometry('%dx%d+%d+%d' % (width, height, x, y))
    
center_window(800, 480)

# Titel Schrift ueber Programm-Fenster 
zeroLabel = Label(root, text=">> Hauptfenster mit Aktivität <<", font=("TimesNewRoman", 10), bg=('#999999'))
zeroLabel.place(x=305,y=28)

root.mainloop()
Man sieht hier, dass die "Spinner-Bar-Anzeige" bei Aufruf vor dem "Hauptfenster" steht - Das ist gut!
Klickt man aber auf das "Hauptfenster", so setzt sich dieses vor das "Spinner-Bar-Fenster" - Das ist schlecht!

Messageboxes lassen sich nicht verdrängen, also muss es noch eine Position vor dem Topmost,1 geben?

Gruss jts
Antworten