Seite 1 von 1

Grundgerüst für PyGTK/Glade Programmen

Verfasst: Montag 25. September 2006, 12:15
von pose
Hallo zusammen
Ich hatte nun endlich Zeit, um mich mit Python auseinanderzusetzen :D

Ich habe bereits einige Hello Word Programme mit PyGTK und Glade erstellt, möchte aber nun gerne von euch wissen, wie Ihr eure PyGTK Programme aufbaut.
Ich habe folgendes Grudgerüst (für jedes Fenster eine Klasse) gefunden und möchte gerne von euch wissen was Ihr davon haltet.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade


class Dialog1(object):

    def on_dialog1_response(self, widget, data = None):
        self.window.destroy()
        print data
        if data == gtk.RESPONSE_OK:
            print "OK"
        elif data == gtk.RESPONSE_APPLY:
            print "Apply"
        elif data == gtk.RESPONSE_CANCEL:
            print "Cancel"


    def __init__(self, parent = None):
        self.wTree = gtk.glade.XML("gladetest.glade", "dialog1")
        self.window = self.wTree.get_widget("dialog1")

        dic = {}
        for key in dir(self.__class__):
            dic[key] = getattr(self, key)
        self.wTree.signal_autoconnect(dic)

        if parent:
            self.window.set_transient_for(parent)

        self.window.show()


class Window1(object):
    def on_button1_clicked(self, widget, data = None):
        diag = Dialog1(self.window)

    def on_window1_destroy(self, widget, data = None):
        gtk.main_quit()

    def __init__(self):
        self.wTree = gtk.glade.XML("gladetest.glade", "window1")
        self.window = self.wTree.get_widget("window1")

        dic = {}
        for key in dir(self.__class__):
            dic[key] = getattr(self, key)
        self.wTree.signal_autoconnect(dic)

        self.window.show()


def main():
    win1 = Window1()
    gtk.main()
    return 0

if __name__ == "__main__":
    main()

Gruss
pose

Verfasst: Mittwoch 27. September 2006, 18:48
von Leonidas
Ja, ich mache es auch so mit den Klasse-pro-Fenster. Nur schreibe ich __init__ immer als erste Funktion und gebe nie in Main 0 zurück, weil es nicht der int main() aus C entspricht und somit return 1 nicht dem Rückgabewert 1 entspricht (es kommt in der Tat trotz return 1 ein Rückgabewert von 0 raus).

Verfasst: Donnerstag 28. September 2006, 13:21
von pose
Hallo
Ok vielen dank für deine Rückmeldung. Dann werde ich in Zukunft mit diesem Schema arbeiten.
Bei einem Punkt komme ich leider nicht weiter:
Wie wende ich z.B. die Funktion set_sensitive in einer Funktion in der Klasse Dialog1 auf ein Widget in der Klasse Window1?

Gruss
pose

Verfasst: Donnerstag 28. September 2006, 15:30
von Leonidas
pose hat geschrieben:Wie wende ich z.B. die Funktion set_sensitive in einer Funktion in der Klasse Dialog1 auf ein Widget in der Klasse Window1?
Du kannst das Parent-Fenster beim Konstruktor von Child-Fenstern mitgeben und dann dort auf dessen Attribute zugreifen.

Pseudocode:

Code: Alles auswählen

class Parent(object):
    def a(self):
        child = Child(self)
    def funktion(self):
        pass

class Child(object):
    def __init__(self, parent)
        print parent.funktion