Seite 1 von 1

gpyconf - ein Konfigurationsfenster-Generator

Verfasst: Samstag 14. Februar 2009, 13:35
von Dauerbaustelle
Dann will ich doch auch mal was vorstellen.

gpyconf ist ein Tool, welches aus deklarativer Syntax (ähnlich djangos Models) GTK-Konfigurationsfenster generiert und das komplette Konfig-Management handelt.

Nagut, Code sagt mehr als 1000 Worte, oder wie war das ;)

Code: Alles auswählen

#!/usr/bin/env python
import gpyconf

class EmailSettings(gpyconf.Configuration):
    backend_kwargs = dict(file='email_settings.ini')
    imap = gpyconf.fields.CharField('IMAP server address')
    smtp = gpyconf.fields.CharField('SMTP server address')
    user = gpyconf.fields.CharField('Username for those servers')
    password = gpyconf.fields.PasswordField('Password')
    use_ssl = gpyconf.fields.BooleanField('Use SSL/TLS (recommended)')
    inbox_update = gpyconf.fields.IntegerField('Inbox updating cycle (in minutes)')

config = EmailSettings()
config.show_window()
(Beispiel von der Homepage)

Würde resultieren in:
Bild

Edit: Weiteres Beispiel für ein Fenster (da das obere hässlich ist (wobei, das hier ist auch nicht gerade besser)):
Bild

Benutzt man jetzt `ConfigParser` als Backend, würde die Konfigurationsdatei nach einem Speichern mit den im Bild eingestellten Werte so aussehen:

Code: Alles auswählen

[default]
smtp = smtp.myprovider.tld
user = myusername
inbox_update = 10
use_ssl = 1
password = bXlwYXNzd29yZA==
imap = imap.myprovider.tld
Frontend sowie Backend sind austauschbar, es existieren Base-Klasse, die vererbt werden können.

Das erzeugte Fenster ist z.Zt. noch grottig, was daran liegt, dass ich einfach kein Auge für sowas habe.

Wer sich das Zeugs mal ansehen will:
Feedback aller Art erwünscht :)

Verfasst: Montag 16. Februar 2009, 16:10
von Dauerbaustelle
Nicht alle auf einmal!

Verfasst: Montag 16. Februar 2009, 16:40
von hendrikS
Hallo Dauerbaustelle,

ich hatte und habe Schwierigkeiten zu erkennen, worauf Deine Anwendung abzielt.
Configdaten lesen, generieren, verwalten oder alles? Können die Applikationen darauf zugreifen? Ist mir alles nicht so klar.
Auch mit django Models kann ich erst mal nicht so viel anfangen.

Vielleicht bin ich aber auch nur nicht smart genug.

MfG

/Hendrik

Verfasst: Montag 16. Februar 2009, 16:49
von helduel
Moin,

sieht ganz nett aus. Kann ich einem Feld auch einen Validator mitgeben, um die User-Eingaben zu prüfen?

Gruß,
Manuel

Verfasst: Montag 16. Februar 2009, 17:59
von Dauerbaustelle
helduel hat geschrieben:sieht ganz nett aus. Kann ich einem Feld auch einen Validator mitgeben, um die User-Eingaben zu prüfen?
Die Eingaben werden bereits durch eine Validator-Funktion gejagt. Solltest du aber irgendwelche exotischen Wünsche haben, baust du dir einfach dein eigenes Feld zusammen, indem du zB von `CharField` erbst und die `validated_value`-Funktion überschreibst. In diesem Beispiel (`CharField`) sieht die Validator-Funktion so aus:

Code: Alles auswählen

def validated_value(self, value):
    try:
        return self.use_float_or_int(value)
        # (use_float_or_int schaut einfach nur, ob float nötig ist,
        # ansonsten nimmt es int, wenn nicht kompatibel
        # schmeißt es einen ValueError)
    except ValueError:
        self.validation_error(value)
hendrikS: gpyconf handelt alles: Konfigurations-Speichern, Konfigurationsdialoge in GTK und die Verbindung dazwischen. Du erstellst eine Klasse mit den Konfigurationsoptionen (und -typen) und alles andere wird automatisch generiert. Schau dich doch einfach mal im "tests"-Ordner um, neu dazu gekommen ist "pyroom.remake.py", wo ich mal versucht habe, den Konfigurationsdialog von PyRoom nachzubauen (Schönheitsfehler werden noch ausgemerzt). Oder schau dich auf der Seite die oben verlinkt ist um :)

Verfasst: Montag 16. Februar 2009, 18:36
von name
das layout schaut bissi komisch aus. sollte schon alles schoen justiert sein.

Verfasst: Montag 16. Februar 2009, 18:46
von Dauerbaustelle
name hat geschrieben:das layout schaut bissi komisch aus. sollte schon alles schoen justiert sein.
Ja, dazu bin ich allerdings zu doof/ungeschickt/unkreativ...

Verfasst: Montag 16. Februar 2009, 20:53
von ms4py
Ich denke, wenn du mit einer Tabelle layouten würdest, so dass alle Inputboxen unter einander sitzen, würde es schon besser aussehen.
Musst halt mal testen.

Verfasst: Montag 16. Februar 2009, 21:27
von Dauerbaustelle
Joa, werd mich da wohl mal ranmachen.

Hab jetzt auch mal den Screenshot im ersten Beitrag ergänzt. Noch einen anderen gibts auch noch auf der gpyconf-Seite.

Weiteres Feedback höre ich gerne :)

Verfasst: Montag 16. Februar 2009, 22:44
von Leonidas
GTK+ hat ein ziemlich angenehm zu nutzenden Layout-Manager in dem man Elemente quasi an einem Grid justiert, gtk.Table.