Seite 1 von 1

Unerwartete Ausgabe von self.window.get_position()

Verfasst: Mittwoch 21. Juli 2010, 02:22
von atarax
Das Programm, an dem ich schreibe, soll beim Schließen des Fensters die Fenstergröße und -position speichern können, um beim nächsten Aufruf das Fenster an gleicher Stelle wieder zu öffnen, wie es zuvor geschlossen wurde. Leider erhalte ich nicht die richtigen Werte, wie das Skript veranschaulichen soll.

Wenn der Button geklickt wird, dann erhalte ich die richtigen Werte, aber nicht, wenn ich das Fenster schließe. Hat jemand eine Idee, woran das liegen kann und was ich tun kann, damit ich beim Schließen des Fensters die gleichen Werte bekomme wie beim Klicken auf den Button?

Vielen Dank.

Code: Alles auswählen

#!/usr/bin/python
#-*- coding: utf-8 -*-
 
import gtk
 
class Test(object):
    
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy", self.destroy)
        self.window.show()
        self.widGoButton = gtk.Button("Position anzeigen")
        self.widGoButton.connect("clicked", self.actGoButton)
        self.widGoButton.show()
        self.window.add(self.widGoButton)
    
    def actGoButton(self, widget):
        self.readSettings(self)  # liefert richtige Werte
        self.saveSettings(self)
    
    def readSettings(self, data=None):
        self.winPosition = self.window.get_position()
        self.winSize = self.window.get_size()
    
    def saveSettings(self, data=None):
        print
        print "self.window.get_position() =", self.winPosition
        print "self.window.get_size() =", self.winSize
 
    def destroy(self, data=None):
        self.readSettings(self)  # liefert falsche Werte
        self.saveSettings(self)
        gtk.main_quit()
 
    def main(self):
        gtk.main()
 
if __name__ == "__main__":
    test = Test()
    test.main()

Re: Unerwartete Ausgabe von self.window.get_position()

Verfasst: Mittwoch 21. Juli 2010, 06:37
von ms4py
Beim "destroy" ist das Fenster schon zerstört, logischerweise werden dann nicht mehr die gewünschten Werte ausgelesen.
Für deinen Anwendungsfall willst du das "delete_event". Dieses ist außerdem bereits im "Hello World"-Beispiel beschrieben. ;) http://www.pygtk.org/pygtk2tutorial/ch- ... arted.html

Re: Unerwartete Ausgabe von self.window.get_position()

Verfasst: Mittwoch 21. Juli 2010, 16:49
von atarax
Super, vielen Dank! Die Methode delete_event hatte ich entfernt, weil ich nicht erkennen konnte, wozu sie taugt. Jetzt habe ich sie wieder eingefügt und es klappt:

Code: Alles auswählen

def delete_event(self, widget, event, data=None):
        self.readSettings(self)
        self.saveSettings(self)
        return False

Re: Unerwartete Ausgabe von self.window.get_position()

Verfasst: Mittwoch 21. Juli 2010, 18:10
von BlackJack
@atarax: Warum übergibst Du da `self` wenn Du dann doch nichts damit machst!? Zumal das Objekt selbst ja sowieso schon als erstes übergeben wird, da es sich im Methoden handelt.

Re: Unerwartete Ausgabe von self.window.get_position()

Verfasst: Donnerstag 22. Juli 2010, 03:29
von atarax
@BlackJack:
Weil ich ein blutiger Anfänger bin und das mit den Klassen, Methoden und dem self noch nicht ganz begriffen habe. Aber ich bin schon froh, wenn mein Skript das macht, was es tun soll, auch wenn es nicht so elegant ist. Ich lerne noch...