Seite 1 von 1
Fenstergröße mit Rand und Fensterleiste
Verfasst: Freitag 23. Juli 2010, 11:48
von andreaszdw
Wie kriegt man die komplette Fenstgröße heraus?
Mit winfo_height und winfo_width kriege ich nur die Größe des Innenlebens heraus.
Andreas
Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 11:46
von wuf
Hallo andreaszdw
Hier die Ermittlung der Fenster-Aussenmasse:
Code: Alles auswählen
import Tkinter as tk
app_win = tk.Tk()
app_win.geometry("%dx%d+%d+%d" % (400, 300, 0, 0))
app_win.update_idletasks()
topbar_height = app_win.winfo_rooty() - app_win.winfo_y()
border_thickness = app_win.winfo_rootx() - app_win.winfo_x()
app_win_height = topbar_height + app_win.winfo_height() + border_thickness
app_win_width = app_win.winfo_width() + 2 * border_thickness
print "Fenster Innenabmessung", app_win.winfo_width(), app_win.winfo_height()
print "Titelbar- & Rahmendicke", topbar_height, border_thickness
print "Fenster Aussenabmessung", app_win_width, app_win_height
app_win. mainloop()
Gruss wuf

Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 11:59
von Rebecca
Hmm, das klappt bei mir nicht:
Code: Alles auswählen
Fenster Innenabmessung 400 300
Titelbar- & Rahmendicke 0 0
Fenster Aussenabmessung 400 300
Ich weiss aber gar nicht, ob Programme unter Linux eine Chance haben, das herauszufinden. Das Zeichnen des Rahmens und der Titelzeile ist ja Sache des Window-Managers.
Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 12:20
von BlackJack
Und der Rahmen muss ja weder auf allen Seiten gleich breit sein, noch auf einer Seite über die ganze Seite die gleiche Breite haben. Ausserdem entscheidet über den Rahmen ja nicht zwingend das System auf dem das Programm läuft, sondern das auf dem das Display ist. Weiss gar nicht ob man an die Information so überhaupt herankommen kann/soll.
Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 13:24
von wuf
Hallo Rebecca
Danke für deinen Hinweis. Habe das Skript nur unter 'Windows' getestet. Dort sieht die Ausgabe wie folgt aus:
Code: Alles auswählen
Fenster Innenabmessung 400 300
Titelbar- & Rahmendicke 30 8
Fenster Aussenabmessung 416 338
Unter Linux habe ich das gleiche Ergebnis wie du.
Gruss wuf

Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 13:55
von wuf
Hallo BlackJack
BlackJack hat geschrieben:Und der Rahmen muss ja weder auf allen Seiten gleich breit sein, noch auf einer Seite über die ganze Seite die gleiche Breite haben.
Habe bis jetzt noch nicht herausgefunden wie bei einem Tk-Hauptfenster die Rahmendicke (links, unten, rechts) idividuell bzw. die Dicke der Titelleiste verändert werden kann. Habe mein Skript nur unter 'Windows' ausgetestet. Hier scheinen diese Masse fix gegeben zu sein.
Beim Forum-Editor habe ich noch folgenden Effekt festgestellt. Gebe ich in meinem Skript den String ein:
wird er in Python-Code-Tags bei mir bei der Ausgabe wie folgt präsentiert:
Was könnte das sein?
Gruss wuf

Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 14:25
von wuf
...... Das folgende Skript sollte auf Windows & Linux richtig funktionieren:
Code: Alles auswählen
import Tkinter as tk
app_win = tk.Tk()
xpos = 100
ypos = 100
width = 400
height = 300
app_win.geometry("%dx%d+%d+%d" % (width, height, xpos, ypos))
app_win.update_idletasks()
topbar_height = app_win.winfo_rooty() - ypos
border_thickness = app_win.winfo_rootx() - xpos
app_win_height = topbar_height + app_win.winfo_height() + border_thickness
app_win_width = app_win.winfo_width() + 2 * border_thickness
print "Fenster Innenabmessung", app_win.winfo_width(), app_win.winfo_height()
print "Titelbar- und Rahmendicke", topbar_height, border_thickness
print "Fenster Aussenabmessung", app_win_width, app_win_height
app_win. mainloop()
Gruss wuf

Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 15:25
von Rebecca
wuf hat geschrieben:Habe bis jetzt noch nicht herausgefunden wie bei einem Tk-Hauptfenster die Rahmendicke (links, unten, rechts) idividuell bzw. die Dicke der Titelleiste verändert werden kann.
Wie gesagt, unter Linux ist das Zeichnen des Rahmens und der Titelleiste Sache des Windowmanagers, nicht der Applikation.
Mit meiner normalen Fvwm-Konfiguration funktioniert dein Skript jetzt. Wenn ich allerdings die Titelleiste woanders habe als oben stimmt es auch wieder nicht.
Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 17:05
von wuf
OK Rebecca
Rebecca hat geschrieben: Wenn ich allerdings die Titelleiste woanders habe als oben stimmt es auch wieder nicht.
Danke für deine Antwort. Ich wusste leider nicht, dass Titelleisten bei Hauptfenstern noch woanderst angebracht sein können (links, unten oder rechts?). Somit kann mein Skript natürlich nicht für alle Varianten angewendet werden.
Gruss wuf

Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Samstag 24. Juli 2010, 18:01
von Dav1d
Code: Alles auswählen
Fenster Innenabmessung 400 300
Titelbar- und Rahmendicke 15 2560
Fenster Aussenabmessung 5520 2875
Kann irgendwie nicht sein, oder?
ArchLinux/dwm
Re: Fenstergröße mit Rand und Fensterleiste
Verfasst: Sonntag 25. Juli 2010, 07:28
von wuf
Dav1d hat geschrieben:
Kann irgendwie nicht sein, oder?

Da hast du natürlich 100% recht!
@andreaszdw: Scheinbar gibt es für dein Problem keine vernünftige Lösung.
Gruss wuf
