Hallo, ich hoffe, ich gehe hier mit meiner 'Unwissenheit' keinem auf den Geist!
Ich studiere Maschinenbau und beginne gerade mit meiner Diplomarbeit und habe ien paar Probleme mit Python!
Ich wollte mit WX eine GUI zusammenbasteln, in die einige Eintraege geschrieben werden und dann gespeichert und wieder ausgelesen werden.
Wenn jemand von Euch mir helfen könnte, wäre ich echt dankbar.
Ich würde mich z.B. sehr über ein Beispielprog freuen, indem z.B. die Eintraege aus einer wx-Tabelle und zwei weitere Eintraege aus einfachen Eingabefeldern gespeichert werden und dann wieder ausgelesen werden.
Vielleicht gibt es hier ja sogar so nette Menschen, an die ich mich evtl. telefonisch bei weiteren 'dummen' Fragen wenden könnte!
Vielen Dank!
Jens
Hilfe: Datei speichern und lesen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich nutze kein wx mehr, also kann ich dir kein direktes Beispiel geben, aber ich kann dir mal einen Vorschlag für das Grundgerüst machen:JensP-Anfaenger hat geschrieben:Ich würde mich z.B. sehr über ein Beispielprog freuen, indem z.B. die Eintraege aus einer wx-Tabelle und zwei weitere Eintraege aus einfachen Eingabefeldern gespeichert werden und dann wieder ausgelesen werden.
Du baust eine Datenstruktur zusammen (ein dict würde sich anbieten), wo diese Werte gespeichert werden. Diese Struktur kannst du dann mit pickle auf die Platte speichern und auch wieder auslesen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich habe versucht, es mit einem dict zu machen:
Zum Auslesen:
Funktioniert irgendwie nicht!
Warum?
Code: Alles auswählen
a={}
a["ersterEintrag"]='ErsterWert'
.
.
.
file=open(filename,"w")
pickle.dump(a,f)
Code: Alles auswählen
file=open(filename,"w")
pickle.load(f)
variable=a["ersterEintrag"]
Warum?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Erstens: du solltest eine Variable nicht file nennen, die überschreibt dann das builtin file() (das zum öffnen von Dateien ist). Zweitens: Wie kann pickle etwas in stream f dumpen und auslesen, wenn es diesen Stream nicht gibt? Du hast ihn file genannt...JensP-Anfaenger hat geschrieben:Zum Auslesen:Code: Alles auswählen
a={} a["ersterEintrag"]='ErsterWert' file=open(filename,"w") pickle.dump(a,f)
Funktioniert irgendwie nicht!Code: Alles auswählen
file=open(filename,"w") pickle.load(f) variable=a["ersterEintrag"]
Warum?
Ich nutze, so seltsam es auch scheint, auch unter Windows GTK+/PyGTK. Hat mehrere Gründe: läuft auf allen für mich relevanten Platformen (wx auch), ist recht schnell (wx auch), hat eine gute Referenz (wx nicht), hat tolle Doku (wx nicht), läuft stabil (wx nicht immer), programmiert sich einfach und unkompliziert - mehr pythonic als wx. Somit steht mir GTK beim programmieren seltener im Weg als wx, so dass ich mich auf die Programmlogik konzentrieren kann, statt zu überlegen, warum es in wxPython mehrere Wege gibt estwas zu erreichen, warum diese alle buggy sind und warum die gefixten Versionen erst in einem halben Jahr released werden.raist1314 hat geschrieben:Warum nutzt Du kein wx mehr und was benutzt Du stattdessen?Leonidas hat geschrieben:Ich nutze kein wx mehr
Bin grad dabei, ich Demo App zu schreiben, mit gtk und pickle, ok? Geduldet euch noch ein wenig, bin bald fertig
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Okay, hier das Beispiel:
Erst werden die Widgets erstellt, dann füllt load() sie mit Werten. Danach kann man im Fenster die Werte verändern, sowohl in den Eingabefeldern als auch in der Liste. Beim schließen wird in save() alles in ein Dictionary gespeichert (die Struktur ist in load() vorgegeben) und alles wird in ein Picklefile gespeichert. Beim nächsten öffnen werden, wenn das Picklefile vorhanden ist, die Daten gelesen, wenn nicht dann Defaultwerte gesetzt und die Widgets gefüllt.
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import gtk, pickle
class SomeWindow(object):
def __init__(self):
self.window = gtk.Window()
self.window.set_title("Demo Save")
self.window.set_default_size(330, 220)
self.window.connect("delete_event", self.delete_event)
self.box = gtk.Table()
sw = gtk.ScrolledWindow()
sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.model = gtk.ListStore(str)
self.treeview = gtk.TreeView(self.model)
self.treeview.columns_autosize()
sw.add(self.treeview)
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn("A column", renderer, text=0)
renderer.connect('edited', self.edited)
renderer.set_property('editable', True)
self.treeview.append_column(column)
for st in range(3):
self.model.append(['Just some text'])
self.t1 = gtk.Entry()
self.t2 = gtk.Entry()
self.box.attach(sw, 0, 1, 0, 2)
self.box.attach(self.t1, 1, 2, 0, 1)
self.box.attach(self.t2, 1, 2, 1, 2)
self.box.set_row_spacings(5)
self.box.set_col_spacings(5)
self.window.add(self.box)
self.window.show_all()
self.load()
def delete_event(self, widget, event, data=None):
self.save()
gtk.main_quit()
return False
def edited(self, cell, row, text):
iterator = self.model.get_iter_from_string(row)
self.model.set_value(iterator, 0, text)
def save(self):
struct = {}
struct["t1"] = self.t1.get_text()
struct["t2"] = self.t2.get_text()
struct["list"] = []
for row in self.model:
struct["list"].append(row[0])
f = file('savedemo.pickle', 'w')
pickle.dump(struct, f)
f.close()
def load(self):
try:
f = file('savedemo.pickle', 'r')
struct = pickle.load(f)
f.close()
except IOError:
# File not found
struct = {'t1' : '4004',
't2' : 'P1',
'list' : ['Python', 'Haskell', 'Ruby']}
# populate
self.t1.set_text(struct["t1"])
self.t2.set_text(struct["t2"])
for seq, val in enumerate(struct["list"]):
iterator = self.model.get_iter(seq)
self.model.set_value(iterator, 0, val)
#self.model.append([val])
def main():
sw = SomeWindow()
gtk.main()
if __name__ == '__main__':
main()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Vielen Dank für deine Mühe!
Ich werde, sobald ich GTK+ installiert habe
(scheint nicht so einfach unter WinXP),
es ausprobieren!
Gibt es für GTK+ auch so etwas wie den BOA-Construktor?
Danke!
Jens
Ich werde, sobald ich GTK+ installiert habe
(scheint nicht so einfach unter WinXP),
es ausprobieren!
Gibt es für GTK+ auch so etwas wie den BOA-Construktor?
Danke!
Jens
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Jens!
http://python.sandtner.org/viewtopic.php?p=17098#17098
mfg
Gerold
Hier findest du ein paar Links, die dich vielleicht weiter bringen:JensP-Anfaenger hat geschrieben: Ich werde, sobald ich GTK+ installiert habe
(scheint nicht so einfach unter WinXP), es ausprobieren!
http://python.sandtner.org/viewtopic.php?p=17098#17098
Falls du damit so etwas meinst wie Formulare gestalten die du dann mit Python programmieren kannst --> Glade.JensP-Anfaenger hat geschrieben: Gibt es für GTK+ auch so etwas wie den BOA-Construktor?
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.