Fenstergröße mit Rand und Fensterleiste

Fragen zu Tkinter.
Antworten
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

Wie kriegt man die komplette Fenstgröße heraus?

Mit winfo_height und winfo_width kriege ich nur die Größe des Innenlebens heraus.

Andreas
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 :wink:
Take it easy Mates!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 :wink:
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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:

Code: Alles auswählen

Titelbar- & Rahmendicke
wird er in Python-Code-Tags bei mir bei der Ausgabe wie folgt präsentiert:

Code: Alles auswählen

Titelbar- & Rahmendicke
Was könnte das sein?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

...... 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 :wink:
Take it easy Mates!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 :wink:
Take it easy Mates!
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Code: Alles auswählen

Fenster Innenabmessung 400 300
Titelbar- und Rahmendicke 15 2560
Fenster Aussenabmessung 5520 2875
Kann irgendwie nicht sein, oder? :lol:

ArchLinux/dwm
the more they change the more they stay the same
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Dav1d hat geschrieben: Kann irgendwie nicht sein, oder? :lol:
Da hast du natürlich 100% recht! :lol:

@andreaszdw: Scheinbar gibt es für dein Problem keine vernünftige Lösung.

Gruss wuf :wink:
Take it easy Mates!
Antworten