PYGTK Programm zum ändern von Config-Dateien [Lernübung]

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
maces
User
Beiträge: 12
Registriert: Mittwoch 23. Juli 2008, 20:17
Kontaktdaten:

Okay, also ist das was ich unter Funktion verstanden habe eine Methode. eine Methode um Daten zu manipulieren.

Also würde man die Methoden die Objekte des Typs aktiv,neustart,Kommando manipulieren in eine Klasse stecken?

Okay ich muss gestehen, das ich den Code nicht ganz verstehe,

Command:
__init__ ist klar
__str__ definiert den Aufbau des Objekts "aktiv,neustart,Kommando"
@classmethod die Folgende Methode ist Klasse und Methode?
parse parst eine Zeile und gibt ein Objekt des Typs "aktiv,neustart,Kommando" zurück

Commands:
__init__ list()?
__str__ macht das Objekt "aktiv,neustart,Kommando" zu einem String
__len__ gibt die Länge eines Objekts zurück
__getitem__ gibt den Wert eines Items zurück
__setitm__ setzt den Wert eine Items
__delitm__ löscht ein Item
add fügt eine Objekt dem Treeview hinzu
read ließt mittels der parse Funktion von Command die Aktuelle Zeile aus und gibt sie zurück
load ließt die Configdatei aus
save speichert die übergebene Zeile in die Configdatei

also wäre das jetzt nach dem MVC oder MVP Modell geschrieben? Die einzelnen Methoden werden dann von den Buttons der GUI aufgerufen?
[url=http://www.maces-net.de/]maces-net.de[/url] | [url=http://www.archlinux.org]Archlinux[/url] | [url=http://www.lxde.org]LXDE[/url]
BlackJack

@maces: Das was Du Typ "aktiv,neustart,Kommando" nennst, hat durch die Klasse den etwas unkomplizierteren Namen `Command`. Mit Klassen modelliert man eigene Datentypen.

Mit `classmethod()` erzeugt man Methoden, die für die Klasse gedacht sind, und die Klasse auf der sie aufgerufen werden, als erstes Argument übergeben bekommen. Im Gegensatz zu den normalen Methoden, die man auf dem Exemplar einer Klasse aufruft und die eben dieses Exemplar als erstes Argument bekommen.

`Commands` ist kein "aktiv,neustart,Kommando"-Objekt, sondern ein Container der viele dieser Objekte aufnimmt. Und die entsprechenden Methoden lesen bzw. schreiben all diese Objekte.

Wo siehst Du bei `add()` einen Treeview? Das hier ist der Teil, der von der GUI komplett unabhängig ist.

`read()` liest die komplette Datei ein bzw. verarbeitet ein itierierbares Objekt, das Zeilen liefert zu einem `Commands`-Objekt.

`save()` bekommt keine Zeile übergeben, sondern speichert das `Commands`-Exemplar, auf dem die Methode aufgerufen wird, unter dem Dateinamen, der übergeben wird.

Ich habe so ein bisschen den Verdacht, dass Du Klassen/Objekte noch nicht so richtig verstanden hast. Den Schritt solltest Du IMHO auf jeden Fall hinter Dir haben, bevor Du an die GUI herangehst.

Der Quelltext war wie gesagt ungetestet. Hier ist eine leicht fehlerbereinigte Version: http://paste.pocoo.org/show/138365/ und hier eine kleine Sitzung in einer Python-Shell mit folgenden Daten:

Code: Alles auswählen

bj@s8n:~$ cat test.txt
#foo
@bar
#@baz

Code: Alles auswählen

In [37]: commands = Commands.load('test.txt')

In [38]: len(commands)
Out[38]: 3

In [39]: c = commands[1]

In [40]: c.active
Out[40]: True

In [41]: c.restart
Out[41]: True

In [42]: c.command
Out[42]: 'bar'

In [43]: str(c)
Out[43]: '@bar\n'

In [44]: c = Command('hallo', active=False)

In [45]: print c
#hallo


In [46]: commands.add(c)

In [47]: print commands
#foo
@bar
#@baz
#hallo
Benutzeravatar
maces
User
Beiträge: 12
Registriert: Mittwoch 23. Juli 2008, 20:17
Kontaktdaten:

BlackJack hat geschrieben:Ich habe so ein bisschen den Verdacht, dass Du Klassen/Objekte noch nicht so richtig verstanden hast. Den Schritt solltest Du IMHO auf jeden Fall hinter Dir haben, bevor Du an die GUI herangehst.
Ich denke das ist das Hauptproblem im Moment, ich denke ich werde erstmal wieder die Grundlagen aufarbeiten.

Sobald ich glaube es verstanden zu haben, werde ich mal den Code neu schreiben und hier posten.

Nochmal Danke für eure Hilfe und die Geduld :)

maces
[url=http://www.maces-net.de/]maces-net.de[/url] | [url=http://www.archlinux.org]Archlinux[/url] | [url=http://www.lxde.org]LXDE[/url]
Antworten