Grundgerüst für PyGTK/Glade Programmen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
pose
User
Beiträge: 2
Registriert: Montag 25. September 2006, 11:59
Wohnort: Schweiz
Kontaktdaten:

Montag 25. September 2006, 12:15

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 27. September 2006, 18:48

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).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
pose
User
Beiträge: 2
Registriert: Montag 25. September 2006, 11:59
Wohnort: Schweiz
Kontaktdaten:

Donnerstag 28. September 2006, 13:21

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 28. September 2006, 15:30

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
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten