Speichern einer datei gelinkt nicht

Fragen zu Tkinter.
Antworten
Benutzeravatar
LinuxDonald
User
Beiträge: 11
Registriert: Sonntag 7. März 2010, 18:25
Wohnort: Tangermünde
Kontaktdaten:

Irgendwie bekomme ich das Speichern einer Datei nicht hin
Vorneweg ich bin Anfänger.

Code: Alles auswählen

#!/usr/local/bin/python3.1

# ToDo:
# menus müssen mit Funktionen versehen werden.
# def sortieren muss an tkinter angepasst werden.

import sys, tkinter, tkinter.scrolledtext
import functions

main = tkinter.Tk()

# Zielobjekt der Menubefehle
fr = tkinter.scrolledtext.ScrolledText(main)
fr.pack(expand=1, fill="both")

# Untere Leiste
fr1 = tkinter.Frame(main, height=20, relief="sunken", bd=1)
fr1.pack(side="top", fill="both")

# erzeugt gesamte Menuleiste
mBar = tkinter.Menu(main)

# erzeugt Menuobjekte in der Menuleiste
mFile = tkinter.Menu(mBar)
# Menu nicht abtrennbar
mFile["tearoff"] = 0
mEdit = tkinter.Menu(mBar)
mEdit["tearoff"] = 0

# erzeugt Elemente im Datei Menu
mFile.add_command(label="Neu", command=lambda: print(type(fr.frame)))
mFile.add_command(label="Laden", command=lambda: functions.openfile(fr))
mFile.add_command(label="Speichern", command= lambda: functions.savefile(fr))
mFile.add_separator()
mFile.add_command(label="Benden", command=lambda: functions.ende())

# erzeugt Elemente im Bearbeiten Menu
mEdit.add_command(label="Sortieren", command=lambda: functions.sortieren())

# erstes Menu zur Menuleiste hinzu
mBar.add_cascade(label="Datei", menu=mFile)
mBar.add_cascade(label="Bearbeiten", menu=mEdit)

# gesamte Menuleiste zu Fenster hinzu
main["menu"] = mBar

main.mainloop()

Code: Alles auswählen

import sys, tkinter
from tkinter import filedialog

# ToDo:
# def savefile(): herausfinden wie ich den inhalt von fr auslesen kann.
# def sortieren(): anpassen.

def ende():
	sys.exit()

def openfile(fr):
	fileopen = filedialog.askopenfilename()
	d = open(fileopen)
	z = d.readline()
	while z:
		fr.insert("end", z)
		z = d.readline()
	d.close()

def savefile(fr):
	filesave = filedialog.asksaveasfilename()
	d = open(filesave,"w")
	z = d.writelines()
	while z:
		fr.get("end", z)
		z = d.writelines()
	d.close()


def sortieren():
	print("Sortieren")
	f = open(eingabe)
	allezeilen = f.readlines()
	f.close()
	allezeilen.sort(key=str)
	f = open(eingabe,"w+")
	f.writelines(allezeilen)
	f.close()
Fehlermeldung ist:
[LinuxDonald@localhost asw-sort]$ ./asw-sort-gui.py
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/local/lib/python3.1/tkinter/__init__.py", line 1399, in __call__
return self.func(*args)
File "./asw-sort-gui.py", line 33, in <lambda>
mFile.add_command(label="Speichern", command= lambda: functions.savefile(fr))
File "/home/LinuxDonald/asw-sort/functions.py", line 23, in savefile
z = d.writelines()
TypeError: writelines() takes exactly 1 argument (0 given)
[LinuxDonald@localhost asw-sort]$

P.s. def sortieren(): << bitte ignorieren ist noch als das alles noch aus der Zeit wo alles für Konsole gemacht war.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Fehlermeldung ist doch wohl eindeutig!
Du übergibts der Methode "writelines" kein Argument. Diese erwartet eine Liste mit Zeilen, die zu schreiben sind...

Weitere Hinweise:
- Dateien öffnen sollte man immer mit with bzw. try..finally
- Bei Variablen- und Funktionsnamen trennt man verschiedene Wörter mit Unterstrich und macht sie dadurch deutlich lesbarer
Benutzeravatar
LinuxDonald
User
Beiträge: 11
Registriert: Sonntag 7. März 2010, 18:25
Wohnort: Tangermünde
Kontaktdaten:

Nur frage ist wie soll ich den Inhalt übergeben?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Versuch es mal mit

Code: Alles auswählen

d.write(fr.get(1.0, END))
Benutzeravatar
LinuxDonald
User
Beiträge: 11
Registriert: Sonntag 7. März 2010, 18:25
Wohnort: Tangermünde
Kontaktdaten:

Vielen Dank es funktioniert :)
Antworten