Seite 1 von 1
Formular speichern mitsamt Eingabewerten
Verfasst: Dienstag 19. Oktober 2021, 12:35
von Firlefanzus
Hallo liebe Python-Gemeinde,
als Anfänger habe ich es nun geschafft, ein Formular mit Eingabe- und Berechnungsfeldern zu erstellen.
Die Buttons funktionieren (berechnen).
Aber jetzt hänge ich beim Speichern des mit Werten befüllten gesamten Formulars für die Ablage u. Doku.
Nun zu meinen Fragen:
Wie muss die Funktion "save_it()" aussehen, damit das gesamte Formular erfasst wird (ähnlich einem Screenshot)?
Ginge das als *.jpg, *.png oder *.pdf?
VIELEN DANK SCHON MAL!
Hier der Abschnitt des Codes mit "Speichern als"-Button (b5), bei dem ich leider nicht weiter weiß:
from tkinter.filedialog import asksaveasfilename
# Speichern als:
def save_it():
filename = asksaveasfilename(
filetypes=[('jpg-files', '.jpg')], initialfile='zzFeder.jpg')
# Formular erstellen:
def makeform(root, fields):
entries = {}
for field in fields:
row = Frame(root)
lab = Label(row, width=48, text=field+": ", anchor='w')
ent = Entry(row, width=32)
ent.insert(0,"0")
row.pack(side=TOP, fill=X, padx=5, pady=2)
lab.pack(side=LEFT)
ent.pack(side=RIGHT, expand=YES, fill=X)
entries[field] = ent
return entries
# Aufruf der Funktionen mit Buttons:
if __name__ == '__main__':
root = Tk()
ents = makeform(root, fields)
root.bind('<Return>', (lambda event, e=ents: fetch(e)))
b1 = Button(root, text='Federrate',
command=(lambda e=ents: springrate(e)))
b1.pack(side=LEFT, padx=5, pady=5)
b2 = Button(root, text='MaxFederhub+Block',
command=(lambda e=ents: maxspringstrokezw(e)))
b2.pack(side=LEFT, padx=5, pady=5)
b3 = Button(root, text='MaxVorspannung',
command=(lambda e=ents: maxpreload(e)))
b3.pack(side=LEFT, padx=5, pady=5)
b4 = Button(root, text='MaxAnfangs+EndkraftFeder',
command=(lambda e=ents: anfangsendkraft(e)))
b4.pack(side=LEFT, padx=5, pady=5)
b5 = Button(root, text='Speichern als',
command=(save_it))
b5.pack(side=LEFT, padx=5, pady=5)
b99 = Button(root, text='Quit', command=root.quit)
b99.pack(side=LEFT, padx=5, pady=5)
root.mainloop()
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Dienstag 19. Oktober 2021, 13:05
von __deets__
Dir ist doch schon mal gesagt worden, dass du die Code Tags benutzen sollst. Wieso schon wieder diese unlesbare Textwüste?
Und zu deinem Problem: du liest einfach die Werte aus & schriebst sie in eine Textdatei. So wie alle anderen Programme. Word oder excel speichern auch keine Screenshots. Sondern die eigentlichen Daten.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Donnerstag 21. Oktober 2021, 18:18
von Firlefanzus
Hallo deets,
ja, Du hast ja recht. Ist schon eine Weile her...
Ich hab's rauskopiert aus PyCharm und wenn's hier eingefügt wird, ist die Formatierung weg.
In den FAQs unter Textformatierung steht leider nichts, wie das sein soll und wie das korrekt funktioniert.
Der Editor übernimmt demnach die Formatierung nicht. Da hab' ich's eben so gelassen.
Aber vielen Dank für Deine Hilfe.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Donnerstag 21. Oktober 2021, 19:26
von rogerb
@Firlefanzus,
um deinen Code leserlich darzustellen, musst du
[code]
vor den Anfang des Quellcodes und
[/code]
hinter das Ende des Quellcode schreiben. Dann wird es richtig dargestellt.
Noch einfacher geht es, wenn du auf den Button "Vollständiger Editor & Vorschau" und dann auf den Button mit </> klickst. Dann werden diese Formatierungscodes automatisch eingefügt.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Donnerstag 21. Oktober 2021, 20:51
von Dennis89
Hier der originale Code, mit originalen Einrückungen:
Code: Alles auswählen
from tkinter.filedialog import asksaveasfilename
# Speichern als:
def save_it():
filename = asksaveasfilename(
filetypes=[('jpg-files', '.jpg')], initialfile='zzFeder.jpg')
# Formular erstellen:
def makeform(root, fields):
entries = {}
for field in fields:
row = Frame(root)
lab = Label(row, width=48, text=field+": ", anchor='w')
ent = Entry(row, width=32)
ent.insert(0,"0")
row.pack(side=TOP, fill=X, padx=5, pady=2)
lab.pack(side=LEFT)
ent.pack(side=RIGHT, expand=YES, fill=X)
entries[field] = ent
return entries
# Aufruf der Funktionen mit Buttons:
if __name__ == '__main__':
root = Tk()
ents = makeform(root, fields)
root.bind('<Return>', (lambda event, e=ents: fetch(e)))
b1 = Button(root, text='Federrate',
command=(lambda e=ents: springrate(e)))
b1.pack(side=LEFT, padx=5, pady=5)
b2 = Button(root, text='MaxFederhub+Block',
command=(lambda e=ents: maxspringstrokezw(e)))
b2.pack(side=LEFT, padx=5, pady=5)
b3 = Button(root, text='MaxVorspannung',
command=(lambda e=ents: maxpreload(e)))
b3.pack(side=LEFT, padx=5, pady=5)
b4 = Button(root, text='MaxAnfangs+EndkraftFeder',
command=(lambda e=ents: anfangsendkraft(e)))
b4.pack(side=LEFT, padx=5, pady=5)
b5 = Button(root, text='Speichern als',
command=(save_it))
b5.pack(side=LEFT, padx=5, pady=5)
b99 = Button(root, text='Quit', command=root.quit)
b99.pack(side=LEFT, padx=5, pady=5)
root.mainloop()
Grüße
Dennis
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Freitag 22. Oktober 2021, 11:24
von Firlefanzus
Hallo rogerb und Dennis89,
vielen Dank für die Anleitung - sehr nett!
Sowas gehört in die FAQs, nach ganz oben.
Viele Grüße und ein schönes Wochenende
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Freitag 22. Oktober 2021, 12:10
von Firlefanzus
Hallo rogerb und Dennis89,
vielleicht habt Ihr ja eine Idee, wie ich das gesamte Formular (alle Feldnamen+Eingabewertetc.) als *.jpg oder *.pdf direkt abspeichern kann?
Hier fehlt mir, wie ich mitteilen kann, dass das kpl. Formular zu speichern ist:
Code: Alles auswählen
# Speichern als:
def save_it():
filename = asksaveasfilename(
filetypes=[('jpg-files', '.jpg')], initialfile='zzFeder.jpg')
Bisher muss ich per Screenshot das Formular ausschneiden und abspeichern.
Vielen Dank für Eure Hilfe.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Freitag 22. Oktober 2021, 12:19
von __deets__
Warum soll das als Bild gespeichert werden? Sollen die Daten die wieder geladen werden? Oder anderweitig verarbeitet? Du gehst hier vom einem Behelf aus, statt wirklich eine vernünftiges Dateiformat zu erstellen.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Samstag 23. Oktober 2021, 20:24
von Firlefanzus
Hallo deets,
die Datenblätter werden ausgedruckt und gehen raus in die Werkstatt für die Mechaniker zum Einstellen der Federvorspannung etc..
Bisher wird ein Screenshot mit dem Snipping Tool gemacht, gespeichert in der File-Ablage, dann ausgedruckt.
Mit dem "Speichern als" Button wäre das eleganter.
Die Werte in eine Datenbank schreiben und wieder auslesen übersteigt meine Fähigkeiten bei Weitem!
Vielleicht gibt es ja jemand, der das für Geld erledigen möchte?
Am Ende brauchen wir eben ein physisches Blatt Papier für die Werkstatt.
Vielen Dank und viele Grüße
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Samstag 23. Oktober 2021, 20:33
von Sirius3
Dazu macht man doch aber keinen Screenshot, sondern benutzt einen Report-Generator, der das ganze als PDF speichert und ausdruckt.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Dienstag 26. Oktober 2021, 11:23
von Firlefanzus
Hallo Sirius3,
vielen Dank für den Tipp.
Aber ist es nicht so, dass ein Report-Generator die Werte aus einer Datenbank nimmt?
Eine Datenbank habe ich jedoch nicht.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Dienstag 26. Oktober 2021, 11:27
von __deets__
Nein. Tut er nicht.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Dienstag 26. Oktober 2021, 12:32
von __blackjack__
Vielleicht würde auch eine Textdatei schon reichen, die man ausdrucken kann.
Ansonsten sind AFAIK die beiden verbreiteten Möglichkeiten PDFs aus Python heraus zu erzeugen Reportlab oder WeasyPrint. Ersteres ist sehr umfangreich und mächtig, letzteres etwas einfacher und weniger mächtig. Wahrscheinlich würde hier WeasyPrint ausreichen. Das HTML würde ich mit einer Template-Engine wie Jinja2 erstellen, oder zumindest ein Modul wie `markupsafe` verwenden, wenn man sich das per Zeichenkettenoperationen selber zusammenstückeln will.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Freitag 29. Oktober 2021, 20:28
von Firlefanzus
Vielen Dank für Eure Hilfe!
Klar, eine Text-Datei wäre ausreichend.
Aber was muss ich bitte beim Schalter "Speichern als" noch eintragen, damit er alle Feldnamen + Werte des Formulars als *.txt speichert?
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Freitag 29. Oktober 2021, 21:02
von __blackjack__
@Firlefanzus: Den Code der genau das tut musst Du schreiben.
Re: Formular speichern mitsamt Eingabewerten
Verfasst: Dienstag 2. November 2021, 11:16
von Firlefanzus
Mal sehen, ob ich das zustande bringe...
Vielen Dank Euch allen!