Variable Inhalt ersetzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Moere
User
Beiträge: 10
Registriert: Sonntag 10. Januar 2021, 17:23

Samstag 13. Februar 2021, 11:02

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
Sirius3
User
Beiträge: 14609
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 13. Februar 2021, 11:30

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.
Moere
User
Beiträge: 10
Registriert: Sonntag 10. Januar 2021, 17:23

Samstag 13. Februar 2021, 14:47

Mein Fehler :-)

eingabetextfeld.insert(END, text.set()) # geänderter text in variable speich
ern -> Fehler ???
TypeError: set() missing 1 required positional argument: 'value'
__deets__
User
Beiträge: 9881
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 13. Februar 2021, 16:01

Sollte das nicht text.get() sein?
Moere
User
Beiträge: 10
Registriert: Sonntag 10. Januar 2021, 17:23

Samstag 13. Februar 2021, 17:11

Stimmt Fehler ist weg,
aber der alte Text bleibt erhalten
nezzcarth
User
Beiträge: 1306
Registriert: Samstag 16. April 2011, 12:47

Samstag 13. Februar 2021, 19:19

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.
Benutzeravatar
sparrow
User
Beiträge: 2709
Registriert: Freitag 17. April 2009, 10:28

Samstag 13. Februar 2021, 22:31

@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.
Moere
User
Beiträge: 10
Registriert: Sonntag 10. Januar 2021, 17:23

Montag 15. Februar 2021, 10:18

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()    
Sirius3
User
Beiträge: 14609
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 15. Februar 2021, 18:29

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()
Antworten