Seite 1 von 1
Variable Inhalt ersetzen
Verfasst: Samstag 13. Februar 2021, 11:02
von Moere
Hallo,
ich stehe wiedermal auf dem Schlauch.
Folgendes Problem:
Ich möchte einen geänderten Text wieder zurück in die Variable schreiben, aus der der Text ausgelesen wurde.
Einlesen funktioniert, Zurücklesen nicht.
Code: Alles auswählen
import tkinter as tk
from tkinter import StringVar, Text, END
root = tk.Tk()
root.geometry('900x400')
root.title('Test')
text = StringVar()
text.set('testtext der geändert werden soll') # wird später aus Datei ausgelesen
def ausg():
eingabetextfeld.insert(END, text.set()) # geänderter text in variable speichern -> Fehler ???
ausgabetextfeld.insert(END, text.get()) # geänderter text im Nachbarfeld ausgeben
labelInfo = tk.Label(root,font = 'arial 10', text = "Eingabefeld").place(x=20, y=150)
labelInfo = tk.Label(root,font = 'arial 10', text = "Ausgabefeld").place(x=450, y=150)
eingabetextfeld = Text(root, height=15, width=40)
eingabetextfeld.place(x=100, y=15)
ausgabetextfeld = Text(root, height=15, width=40)
ausgabetextfeld.place(x=540, y=15)
eingabetextfeld.insert(END, text.get()) # text aus variable lesen und evtl. editieren
Speichern = tk.Button(root, text='Ausgabe', bd ='5', command = (ausg),
bg = 'antique white', font = 'arial 10 bold').place(x=400, y=300)
root.mainloop()
Der Code ist stark gekürzt, zeigt aber das Problem.
evtl könnte mir jemand zeigen , WO der Denkfehler ist ?
Vielen Dank
Re: Variable Inhalt ersetzen
Verfasst: Samstag 13. Februar 2021, 11:30
von Sirius3
Jetzt wäre es noch nett, wenn du auch die Fehlermeldung, die du bekommst hier posten würdest, das steht nämlich drin, warum es nicht funktioniert.
Re: Variable Inhalt ersetzen
Verfasst: Samstag 13. Februar 2021, 14:47
von Moere
Mein Fehler
eingabetextfeld.insert(END, text.set()) # geänderter text in variable speich
ern -> Fehler ???
TypeError: set() missing 1 required positional argument: 'value'
Re: Variable Inhalt ersetzen
Verfasst: Samstag 13. Februar 2021, 16:01
von __deets__
Sollte das nicht text.get() sein?
Re: Variable Inhalt ersetzen
Verfasst: Samstag 13. Februar 2021, 17:11
von Moere
Stimmt Fehler ist weg,
aber der alte Text bleibt erhalten
Re: Variable Inhalt ersetzen
Verfasst: Samstag 13. Februar 2021, 19:19
von nezzcarth
Moere hat geschrieben: Samstag 13. Februar 2021, 11:02
Ich möchte einen geänderten Text wieder zurück in die Variable schreiben, aus der der Text ausgelesen wurde.
Nebenbemerkung: In Python gibt es keine Variablen. Es gibt nur Objekte, die an Namen gebunden werden. Man weist also einer Variable nichts zu und speichert auch nichts in ihr, sondern man bindet ein (neues) Objekt an einen Namen. Das mag wie eine terminologische Kleinigkeit erscheinen, macht konzeptuell aber schon einen Unterschied.
Re: Variable Inhalt ersetzen
Verfasst: Samstag 13. Februar 2021, 22:31
von sparrow
@Moere: Welcher Text bleibt wo erhalten? Du fügst Text am Ende (END) des bisherigen Textes ein (insert). Wenn ich mich richtig erinnere, muss man unter tk den bisherigen Text vorher löschen, wenn man ihn komplette ersetzen möchte.
Re: Variable Inhalt ersetzen
Verfasst: Montag 15. Februar 2021, 10:18
von Moere
Ok, hat sich Erledigt - habs hinbekommen
Code: Alles auswählen
import tkinter as tk
from tkinter import StringVar, Text, END, messagebox
root = tk.Tk()
root.geometry('900x400')
root.title('Test')
text = StringVar()
text.set('testtext der geändert werden soll') # wird später aus Datei ausgelesen
def ausg():
result=eingabetextfeld.get("1.0", END+"-1c")
text.set(result) # geänderter text in variable speichern und später in Datei schreiben
messagebox.showinfo("Gespeichert", "Text gespeichert")
ausgabetextfeld.insert(END, text.get()) # geänderter text im Nachbarfeld ausgeben
#command = onSave()
labelInfo = tk.Label(root,font = 'arial 10', text = "Eingabefeld").place(x=20, y=150)
labelInfo = tk.Label(root,font = 'arial 10', text = "Ausgabefeld").place(x=450, y=150)
eingabetextfeld = Text(root, height=15, width=40)
eingabetextfeld.place(x=100, y=15)
ausgabetextfeld = Text(root, height=15, width=40)
ausgabetextfeld.place(x=540, y=15)
eingabetextfeld.insert(END, text.get()) # text aus variable lesen und evtl. editieren
Speichern = tk.Button(root, text='Ausgabe', bd ='5', command = (ausg),
bg = 'antique white', font = 'arial 10 bold').place(x=400, y=300)
root.mainloop()
Re: Variable Inhalt ersetzen
Verfasst: Montag 15. Februar 2021, 18:29
von Sirius3
Benutze kein globalen Variablen. Alles was eine Funktion braucht, muss sie über ihre Argumente bekommen. Es ist wenig sinnvoll, alle Rückgabewerte an Variablen zu binden, vor allem, wenn die None sind.
Benutze kein place, sondern pack oder grid.
Code: Alles auswählen
from functools import partial
import tkinter as tk
from tkinter import messagebox
def ausgabe_speichern(eingabetextfeld, text, ausgabetextfeld):
result=eingabetextfeld.get("1.0", tk.END+"-1c")
text.set(result) # geänderter text in variable speichern und später in Datei schreiben
messagebox.showinfo("Gespeichert", "Text gespeichert")
ausgabetextfeld.insert(tk.END, result) # geänderter text im Nachbarfeld ausgeben
#command = onSave()
def main():
root = tk.Tk()
root.title('Test')
text = tk.StringVar(root, 'testtext der geändert werden soll') # wird später aus Datei ausgelesen
tk.Label(root, font='arial 10', text="Eingabefeld").grid(row=1, column=1)
tk.Label(root, font='arial 10', text="Ausgabefeld").grid(row=1, column=3)
eingabetextfeld = tk.Text(root, height=15, width=40)
eingabetextfeld.grid(row=1, column=2)
ausgabetextfeld = tk.Text(root, height=15, width=40)
ausgabetextfeld.grid(row=1, column=4)
eingabetextfeld.insert(tk.END, text.get()) # text aus variable lesen und evtl. editieren
tk.Button(root, text='Ausgabe', bd ='5',
command=partial(ausgabe_speichern, eingabetextfeld, text, ausgabetextfeld),
bg='antique white', font='arial 10 bold').grid(row=2, column=2)
root.mainloop()
if __name__ == "__main__":
main()