TK und Module?

Fragen zu Tkinter.
Antworten
search
User
Beiträge: 67
Registriert: Donnerstag 24. April 2008, 10:03
Wohnort: In Deutschland

Hallo zusammen, ich mache gerade meine ersten Versuche mit Tkinter und habe da jetzt ein Problem wo ich einfach nicht weiterkomme:
Ich habe eine Hauptdatei, wo der ganze Programmablauf aufgeführt ist, und dann noch eine weitere Datei in der die ganzen Funktion als Module gesammelt sind, die von der Hauptdatei Importiert wird. Meine Frage ist nun, wenn ich z.B. einen Button habe der eine Funktion startet, wie hier im Beispiel der Button...

Code: Alles auswählen

 Hauptdatei: tk_krypto.py
from Tkinter import *
import tk_krypto_modul, ...
...
label = Label (top, text = '')
text = Text(top, wrap=WORD, yscrollcommand=scrollbar.set)
text.pack()
scrollbar.config(command=text.yview)
button = Button(top, text = 'Text einlesen...',  command = tk_krypto_modul.load)
...


Datei: tk_krypto_modul.py
...
def load():
    text.delete(1.0, END)
    file= tkFileDialog.askopenfilename(initialdir = '/home')
    lesen = krypto_modul.datei_open(file)
    text.insert(END, lesen)
    button1.config(top, state=NORMAL)
...
Also der >Button startet die Funktion load(), zum öffnen einer Datei, vorher soll aber noch das Textfeld (das im Hauptprogramm gestartet worden ist) bereinigt werden, um dann den neuen Text einzulesen. Aber wenn ich das so mache bekomme ich immer die Meldung...

Code: Alles auswählen

 File "/home/search/python_prog/krypto_v11-v1.9/tk_krypto_modul.py", line 7, in load
    text.delete(1.0, END)
NameError: global name 'text' is not defined
Wie kann ich der Funktion denn nun sagen, dass >text< ja schon im Hauptprogramm
läuft?? Oder mache ich jetzt einen Fehler??
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das willst du gar nicht tun, damit vermischt du nu Logik und Anzeige. Was du eigentlich möchtest ist eine Funktion in deinem Hauptmodul, welche den Text löscht und dann die load-Funktion aufruft.

Noch ein paar kurze Anmerkungen, hab nur ganz kurz den Code überflogen:
- Lass die *-Importe bleiben, auch bei Tkinter
- Warum steht bei allen Modulen ein "tk_" voran? Nur weil du Tk verwendest, solltes du deine Module nicht damit kennzeichnen, sonder damit was die Module machen .
- Du solltest nichts an den Namen "file" binden, da du so ein built-in verdeckst
- Die Leerzeichen bei den Zuweisungen gehören weg "name = value" => "name=value"
Das Leben ist wie ein Tennisball.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

EyDu hat geschrieben:Die Leerzeichen bei den Zuweisungen gehören weg "name = value" => "name=value"
Nur damit er das nicht missversteht:
Das gilt nur für die Schlüsselwortparameter. Ansonsten gehören da schon Leerzeichen hin:
http://www.python.org/dev/peps/pep-0008/
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Stimmt, das hätte ich besser formulieren sollen.
Das Leben ist wie ein Tennisball.
search
User
Beiträge: 67
Registriert: Donnerstag 24. April 2008, 10:03
Wohnort: In Deutschland

Hallo,
erst mal Danke für die schnelle Antwort. Das mit den *Import dachte ich mir schon, habe hier auch schon die Diskussion ein bischen verfolgt. Habe alles geändert, danke!
Bei meinen Modulen steht kein tk_ davor, das sind nur meine beiden Dateien... die Hauptdatei und die mit den Modulen darin! Wenn das alles läuft werde ich das eh noch ändern, aber ich werde in Zukunft daran denken.
Das mit dem Namen file war ein fehler von mir!!
Leerzeichen ist notiert, danke.

Und sonst zu meinem Problem? Sollte ich da vielleicht eine >Event-Verarbeitung rein Programmieren? Werde das mal probieren.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich verweise jetzt einfach nur auf [wiki]Import[/wiki].
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@search: Modul == Datei, also fangen Deine Modulnamen doch mit `tk_` an. Und Du hast keine Datei mit Modulen darin. So etwas kann man theoretisch machen, indem man Module in einem Modul dynamisch erstellt, aber das ist eher ungewöhnlich und macht in der Regel keinen Sinn.
search
User
Beiträge: 67
Registriert: Donnerstag 24. April 2008, 10:03
Wohnort: In Deutschland

OK, dann habe ich das nur falsch verstanden. Danke!!
Antworten