Textfeld mit Text befüllen

Fragen zu Tkinter.
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Samstag 14. März 2009, 15:47

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
DasIch
User
Beiträge: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Samstag 14. März 2009, 17:39

Lass rechne dass Ergebnis zurückgeben und lies direkt danach ein Tutorial (außer dass openbook dass gibt Minuspunkte).
problembär

Samstag 14. März 2009, 17:54

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:
Zuletzt geändert von problembär am Samstag 14. März 2009, 18:01, insgesamt 1-mal geändert.
DasIch
User
Beiträge: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Samstag 14. März 2009, 18:00

@problembär Diese Lösung ist trotzdem scheisse.
problembär

Samstag 14. März 2009, 18:03

Besser als gar keine Lösung.
DasIch
User
Beiträge: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Samstag 14. März 2009, 18:16

Du legst aber hohe Qualitätsansprüche an.
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Montag 16. März 2009, 18:13

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?
Benutzeravatar
wuf
User
Beiträge: 1497
Registriert: Sonntag 8. Juni 2003, 09:50

Montag 16. März 2009, 18:39

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:
Take it easy Mates!
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Montag 16. März 2009, 18:42

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...
lunar

Montag 16. März 2009, 18:50

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.
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Montag 16. März 2009, 19:43

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
Alles wird gut ;-)
DasIch
User
Beiträge: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Montag 16. März 2009, 20:34

Code: Alles auswählen

def rechne():
    return 1 + 2
Geht übrigens auch.
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Montag 16. März 2009, 21:32

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...
DasIch
User
Beiträge: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Montag 16. März 2009, 21:35

Code: Alles auswählen

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