Seite 1 von 2

Textfeld mit Text befüllen

Verfasst: Samstag 14. März 2009, 15:47
von vogti
Hallo,

ich habe hier eine Datei format.py, die ein Textfeld erstellt. format.py greift auf Funktionen der Datei arbeit.py zu. arbeit.py enthält eine Funktion rechne(), welche das Ergebnis in eine Variable "Ergebnis" speichert.
Wie kann ich jetzt von format.py auf die Variable "Ergebnis" zugreifen und in das Textfeld schreiben, bzw. von arbeit.py direkt in das Textfeld schreiben?

Ich hoffe ich konnte mich verständlich ausdrücken :/

lg,
vogti

Verfasst: Samstag 14. März 2009, 17:39
von DasIch
Lass rechne dass Ergebnis zurückgeben und lies direkt danach ein Tutorial (außer dass openbook dass gibt Minuspunkte).

Verfasst: Samstag 14. März 2009, 17:54
von problembär

Code: Alles auswählen

import Kristallkugel

import arbeit
Textfeld.insert(Tkinter.END, str(arbeit.Ergebnis))
Ich hoffe ich konnte mich verständlich ausdrücken :wink:

Verfasst: Samstag 14. März 2009, 18:00
von DasIch
@problembär Diese Lösung ist trotzdem scheisse.

Verfasst: Samstag 14. März 2009, 18:03
von problembär
Besser als gar keine Lösung.

Verfasst: Samstag 14. März 2009, 18:16
von DasIch
Du legst aber hohe Qualitätsansprüche an.

Verfasst: Montag 16. März 2009, 18:13
von vogti
Naja, aber so einfach ist das leider nicht... Hier mal etwas beispiel code.

format.py:

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *
import rechner
f=Tk()
f.geometry('500x500')
f.title('Test')


#Menüleiste erstellen
mle=Menu(master=f)
f.config(menu=mle)

#Menü erstellen
m1=Menu(master=mle)
mle.add_cascade(label='Datei', menu=m1)
m1.add_command(label='Rechne', command=rechner.rechne)
m1.add_command(label='Beenden', command=f.destroy)

textfeld = Text(f, width=50, height=10)
textfeld.pack(side=RIGHT, padx=2, pady=2)

f.mainloop()
rechner.py:

Code: Alles auswählen

def rechne():
    a = 1
    b = 2
    Ergebnis = a+b
Ich möchte, dass wenn ich den Button "Rechne" drücke, er in rechner.rechne() springt, dort das Ergebnis ermittelt und dieses Ergebnis dann in das Textfeld von format.py rein schreibt. Aber irgendwie stell ich mich zu blöd an oder habe schlicht weg noch nicht genug gelesen (bzw. finde nichts dazu?) um das gelöst zu bekommen.
Anfangs dachte ich, es genügt, wenn ich bei rechner.py einfach auch ein "import format", so dass das dann etwa so aussehen würde:

Code: Alles auswählen

import format
    def rechne():
    a = 1
    b = 2
    Ergebnis = a+b
    format.textfeld.insert(END,Ergebnis)
Naja, geht aber eben nicht. Kann mir das jemand kurz erklären?

Verfasst: Montag 16. März 2009, 18:39
von wuf
Hallo vogti

Zum ausprobieren:

Code: Alles auswählen

# -*- coding: cp1252 -*-

# Skriptname fill_textfield_01_01.py (wuf)

from Tkinter import *
#import rechner

def rechne():
    a = 1
    b = 2
    Ergebnis = a+b
    textfeld.insert(END,Ergebnis)

f=Tk()
f.geometry('500x500')
f.title('Test')

#Menüleiste erstellen
mle=Menu(master=f)
f.config(menu=mle)

#Menü erstellen
m1=Menu(master=mle)
mle.add_cascade(label='Datei', menu=m1)
m1.add_command(label='Rechne', command=rechne)
m1.add_command(label='Beenden', command=f.destroy)

textfeld = Text(f, width=50, height=10)
textfeld.pack(side=RIGHT, padx=2, pady=2)

f.mainloop()

Gruss wuf :wink:

Verfasst: Montag 16. März 2009, 18:42
von vogti
Vielen Dank für deine Mühe! Aber es kann doch nich die Lösung sein, einfach alles in eine Datei zu packen? Zummal ich eigentlich das Interface von den Funktionen trennen wollte...

Verfasst: Montag 16. März 2009, 18:50
von lunar
Das ist auch nicht die Lösung. Die Lösung besteht im korrekten Verwenden von Funktionen und insbesondere von Rückgabewerte von Funktionen. Offenbar scheint dir dieses essentielle Python-Grundwissen aber zu fehlen, daher kann ich die Empfehlung von DasIch nur wiederholen: Lies bitte den Abschnitt über Funktionen im offiziellen Python-Tutorial.

Verfasst: Montag 16. März 2009, 19:43
von busfahrer
Hallo

ich bin ja auch noch eher jungfräulich in Python,daher meine Frage
wäre das der richtige ansatz?
Funktionieren tuts auf jeden Fall

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf8 -*-

import Tkinter as tk
root = tk.Tk()
def rechne():
	a = 1
	b = 2
	ergebnis = a + b
	return ergebnis

def ergebnis_einfuegen():
	entry.insert(tk.END,rechne())

entry = tk.Entry(root)
entry.grid(row=0,column=0)

button = tk.Button(root,text="Ergebnis",command=ergebnis_einfuegen)
button.grid(row=1,column=0)

root.mainloop()
Gruß...busfahrer

Verfasst: Montag 16. März 2009, 19:49
von lunar
Jau :)

Verfasst: Montag 16. März 2009, 20:34
von DasIch

Code: Alles auswählen

def rechne():
    return 1 + 2
Geht übrigens auch.

Verfasst: Montag 16. März 2009, 21:32
von vogti
DasIch hat geschrieben:

Code: Alles auswählen

def rechne():
    return 1 + 2
Geht übrigens auch.
Die Sache mit dem return ist die mir einzige bekannte sache um Werte aus einer Funktion zurückzugeben. Gemäß dem Fall ich mach das wirklich so "return Ergebnis" (in rechner.py) - wie kriege ich das in der ANDEREN DATEI (format.py) in das Textfeld? Ist rechne() und das Textfeld alles in einer Datei ist das doch überhaupt kein Problem.

Auch die Lösung vom Busfahrer beruht darauf, dass alles in einer Datei ist...

Verfasst: Montag 16. März 2009, 21:35
von DasIch

Code: Alles auswählen

from rechner import rechne
# irgendwelcher code
textfeld.insert(Tkinter.END, rechne())