Die Methode wm_geometry() aus Tkinter

Fragen zu Tkinter.
Data
User
Beiträge: 14
Registriert: Freitag 20. Juni 2003, 19:40
Kontaktdaten:

Die Methode wm_geometry() aus Tkinter

Beitragvon Data » Dienstag 9. Dezember 2003, 16:58

Hallo Pythonmeister,

um das Verhalten der Methode wm_geometry() aus dem Modul Tkinter unter Windows XP zu erkunden habe ich das folgende Testprogramm geschrieben:

Code: Alles auswählen

from Tkinter import *


class GeometryTest:

    def __init__(self):
        self.fenster = Tk()
        self.fenster.wm_title(" GeometryTest")
        self.lab_0_0 = Label(self.fenster, text = "Label 0.0", font = ("Arial", 36, "bold"))
        self.lab_0_0.grid(row = 0, column = 0, sticky = NW, pady = 10, padx = 10)
        self.geometriedaten(0, 0)
        self.lab_0_1 = Label(self.fenster, text = "Label 0.1", font = ("Arial", 36, "bold"))
        self.lab_0_1.grid(row = 0, column = 1, sticky = NW, pady = 10, padx = 10)
        self.geometriedaten(0, 1)
        self.lab_1_0 = Label(self.fenster, text = "Label 1.0", font = ("Arial", 36, "bold"))
        self.lab_1_0.grid(row = 1, column = 0, sticky = NW, pady = 10, padx = 10)
        self.geometriedaten(1, 0)
        self.lab_1_1 = Label(self.fenster, text = "Label 1.1", font = ("Arial", 36, "bold"))
        self.lab_1_1.grid(row = 1, column = 1, sticky = NW, pady = 10, padx = 10)
        self.geometriedaten(0, 0)
        self.lab_2_0 = Label(self.fenster, text = "Label 2.0", font = ("Arial", 36, "bold"))
        self.lab_2_0.grid(row = 2, column = 0, sticky = NW, pady = 10, padx = 10)
        self.geometriedaten(2, 0)
        self.lab_2_0 = Label(self.fenster, text = "Label 2.1", font = ("Arial", 36, "bold"))
        self.lab_2_0.grid(row = 2, column = 1, sticky = NW, pady = 10, padx = 10)
        self.geometriedaten(2, 1)
        self.fenster.protocol("WM_DELETE_WINDOW", self.alles_schliessen)
        self.fenster.mainloop()
       
    def geometriedaten(self, einr, einc):
        zeichenreihe = self.fenster.wm_geometry()
        print "Label", einr, ".", einc, "eingebaut! Geometriedaten: ", zeichenreihe
       
    def alles_schliessen(self):
        self.fenster.quit()
        self.fenster.destroy()

GeometryTest()


Dieses Programm bewirkt folgende Ausgabe:

Label 0 . 0 eingebaut! Geometriedaten: 1x1+0+0
Label 0 . 1 eingebaut! Geometriedaten: 1x1+0+0
Label 1 . 0 eingebaut! Geometriedaten: 1x1+0+0
Label 0 . 0 eingebaut! Geometriedaten: 1x1+0+0
Label 2 . 0 eingebaut! Geometriedaten: 1x1+0+0
Label 2 . 1 eingebaut! Geometriedaten: 1x1+0+0

Wie kann es denn das geben? Das Fenster wird in korrekter Größe angezeigt. Die Funktion wm_geometry() liefert allerdings nur Nonsens. (Ich habe geprüft, dass grid_propagate() und resizable() die korrekten Werte liefern.) Also, was mache ich falsch? Oder liegts am Ende an Windows?

Data
Benutzeravatar
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

Beitragvon oenone » Dienstag 9. Dezember 2003, 20:39

ganz einfach: die sachen wurden noch nicht gezeichnet, erst wenn du die mainloop aufrufst.

Fuehr einfach update() aus, bevor du wm_geometry() aufrufst. (in deinem fall "self.fenster.update()")
das hat bei mir den output:

Code: Alles auswählen

Label 0 . 0 eingebaut! Geometriedaten:  186x66+792+470
Label 0 . 1 eingebaut! Geometriedaten:  372x66+792+470
Label 1 . 0 eingebaut! Geometriedaten:  372x132+792+470
Label 0 . 0 eingebaut! Geometriedaten:  372x132+792+470
Label 2 . 0 eingebaut! Geometriedaten:  372x198+792+470
Label 2 . 1 eingebaut! Geometriedaten:  372x198+792+470

hoffe, das hilft dir weiter.

auf bald
oenone
Data
User
Beiträge: 14
Registriert: Freitag 20. Juni 2003, 19:40
Kontaktdaten:

Vielen Dank!

Beitragvon Data » Dienstag 9. Dezember 2003, 21:37

Data

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder