Label kein Topmost trotz Topmost

Fragen zu Tkinter.
Antworten
Toorms
User
Beiträge: 5
Registriert: Donnerstag 8. Oktober 2020, 05:57

Hallo Community,

ich lasse ein ganz normales, einfaches Label anzeigen mit Tkinter. Soweit so gut, folgend einmal mein Code:

Code: Alles auswählen

def show_label_on_screen():
    label = tk.Label(text=strHostName + ' | ' + strNetworkAddress, font=("Consolas", 12, "bold"),
                     fg='black', bg='white')
    label.master.overrideredirect(True)
    label.master.geometry("+10+1042")
    label.master.lift()
    label.master.attributes('-topmost', True)
    label.after_idle(label.master.attributes, '-topmost', True)
    label.pack()
    label.mainloop()
Alles gut - beim starten des Raspberry Pi wird es auch über screen -dmS informations python /home/user/main.py aufgerufen und klappt auch so wie ich das möchte. Es zeigt ein kleines Label im linken unteren Bildschirm an. Nach dem Aufruf startet aber ein weiteres Script, welches beispielsweise nur eine Webseite im Fullscreen-Kioskmode aufruft (es ist aber auch egal, was ich aufrufe, also ob Chromium oder aber einen omxplayer). Dieses verdeckt nun das Label aber, obwohl das Label einen Topmost hat.

Nun habe ich hier und da schon etwas darüber gelesen und auch getestet (letzter Test war "label.after_idle(label.master.attributes, '-topmost', True)"), aber ich werde nicht wirklich weiter schlau. Habt ihr noch eine Idee, woran es liegen kann?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Da wird wohl das eine Topmost-Fenster vom nächsten Topmost-Fenster überdeckt werden. Das ist ein grundsätzliches Problem.
Funktionen sollten alles, was sie brauchen über ihre Argumente bekommen. strHostName und strNetworkAddress kommen aus dem Nichts.
Variablennamen werden komplett klein geschrieben, Datentypen haben im Variablennamen nichts verloren: hostname, network_address.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Toorms: Letztlich ist das Sache der Fensterverwaltung. Du hast der den Hinweis gegeben, dass Dein Fenster immer obenauf sein soll. Wie weit die Fensterverwaltung dem nachkommt, liegt nicht mehr in Deiner Hand.

Und gerade bei den beiden Beispielen — Browser im Kioskmodus und Videoplayer wo ich vermute im Vollbildmodus — werden deren Programmierer ja *auch* fordern immer im Vordergrund angezeigt zu werden. Wenn nicht sogar Vollbildschirm und damit auch vor Elementen wie einer Taskleiste, wo ja sonst auch alle normalen Fenster dahinter angezeigt werden. Vollbild ist ja noch eine Stufe weiter. Das ist ja nicht einfach: Ich möchte gerne vor/über allen anderen angezeigt werden, sondern ich möchte den ganzen Bildschirm und nur für mich alleine.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Toorms
User
Beiträge: 5
Registriert: Donnerstag 8. Oktober 2020, 05:57

Danke für die Informationen. Einleuchtend das ganze, wenn das eigentliche Fensterhandling nicht mehr in meiner Hand liegt, wie es __blackjack__ sagt. In dem Snippets sah es so aus, als kämen die Informationen aus dem nichts, war auch ein etwas älteres Code-Beispiel. Mittlerweile kommt es alles über die Argumente - das ganze ist schon ein wenig aufgeräumter, aber danke auch dir dennoch für die Hinweise.
Antworten