Seite 1 von 1

Fehler bei import ?????

Verfasst: Freitag 9. Dezember 2005, 00:10
von Torsten2005
ein programm mit Tkinter modul funktionierte und dann auf einmal nicht mehr.

Wenn ich nun normal schreibe:
import Tkinter
fenster1= Tk()

kommt eine Fehlermeldung
fenster1 = Tk()
NameError: name 'Tk' is not defined

??? obwohl es schonmal klappte

:?

Verfasst: Freitag 9. Dezember 2005, 04:21
von Joghurt
Tkinter includiert man oft mit

Code: Alles auswählen

from Tkinter import *

Verfasst: Freitag 9. Dezember 2005, 10:06
von jens
Wobei das immer eine schlechte wahl ist... Siehe auch: http://pythonwiki.pocoo.org/Modul_Import

Verfasst: Freitag 9. Dezember 2005, 12:01
von Torsten2005
nun hab ich dann auch umgeschrieben zu from Tkinter import * und dann ging es wieder . aber trotzdem seltsam ,
sind das so die pythonmacken ?

ps: thx für den link :)

Verfasst: Freitag 9. Dezember 2005, 12:15
von mitsuhiko
Torsten2005 hat geschrieben:nun hab ich dann auch umgeschrieben zu from Tkinter import * und dann ging es wieder . aber trotzdem seltsam ,
sind das so die pythonmacken ?
Nein. Das ist Absicht:

Code: Alles auswählen

>>> import sys
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
Aber:

Code: Alles auswählen

>>> from sys import *
>>> dir()
['__builtins__', '__doc__', '__name__', 'api_version', 'argv', 'builtin_module_n ames', 
'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'ex c_clear', 'exc_info', 
'exc_type', 'excepthook', 'exec_prefix', 'executable', 'ex it', 'getcheckinterval', 
'getdefaultencoding', 'getdlopenflags', 'getfilesysteme ncoding', 'getrecursionlimit', 
'getrefcount', 'hexversion', 'maxint', 'maxunicod e', 'meta_path', 'modules', 'path', 
'path_hooks', 'path_importer_cache', 'platfo rm', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 
'setdlopenflags', 'setprofile',  'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 
'version', 'versi on_info', 'warnoptions']

Verfasst: Freitag 9. Dezember 2005, 12:40
von Torsten2005
dann versteh ich nicht , warum es vorher ging , und dann auf einmal nicht mehr ?

Verfasst: Freitag 9. Dezember 2005, 13:44
von Leonidas
Weil Python Namensräume hat, diese sind wichtig, damit du weniger Chaos im Code hast.

Dass kann man etwas mit Ordnern im Dateisystem vergleichen: du hast doch auch nicht alle Dateien auf C:\, oder?

Verfasst: Freitag 9. Dezember 2005, 17:39
von Joghurt
Torsten2005 hat geschrieben:dann versteh ich nicht , warum es vorher ging , und dann auf einmal nicht mehr ?
Vorher hast du "from Tkinter import *" geschrieben. Jetzt hast du aus Versehen "import Tkinter" geschrieben.

Verfasst: Sonntag 11. Dezember 2005, 18:07
von Torsten2005
Joghurt hat geschrieben:
Torsten2005 hat geschrieben:dann versteh ich nicht , warum es vorher ging , und dann auf einmal nicht mehr ?
Vorher hast du "from Tkinter import *" geschrieben. Jetzt hast du aus Versehen "import Tkinter" geschrieben.
:) nein so war es nicht , ich habe zuerst normal
import Tkinter
fenster1 = Tk()

geschrieben (als Beispiel) und es ging mit den Fenster usw. dann nach mehrmaligen starten und rumbrobieren ging es auf einmal nicht mher und es kan die Fehlermeldung
fenster1 = Tk()
NameError: name 'Tk' is not defined

dann hab ich es umgeändert nacht import Tkinter from *
und es ging wieder!
So wenn ich nun ein neues Fenster aufmache und normal schrieb import modul geht es wieder , warum auch nicht .
und das konnte ich mir nicht erklären ? Dies htte ich auch mit anderen Modulen.

Gruß

Verfasst: Sonntag 11. Dezember 2005, 18:18
von Joghurt
Entwickelst du vielleicht unter IDLE? Das benutzt ja Tkinter. Es kann vielleicht sein, dass zum ausführen dieselbe Interpreterinstanz benutzt wird, die auch die GUI bereitstellt, und in der mit from Tkinter import * alles in den globalen Namensraum importiert wurde.

Verfasst: Sonntag 11. Dezember 2005, 19:43
von Torsten2005
Joghurt hat geschrieben:Entwickelst du vielleicht unter IDLE? Das benutzt ja Tkinter. Es kann vielleicht sein, dass zum ausführen dieselbe Interpreterinstanz benutzt wird, die auch die GUI bereitstellt, und in der mit from Tkinter import * alles in den globalen Namensraum importiert wurde.
ja ich mach alles mit idle , somit kann ich dann immer gleich mit F5 kontrollieren :)

- ja könnte sein , kenn mich da mit den namensräumen nicht so aus

Verfasst: Montag 12. Dezember 2005, 13:31
von Leonidas
Torsten2005 hat geschrieben:ja ich mach alles mit idle , somit kann ich dann immer gleich mit F5 kontrollieren :)
Lieber dafür SceTE verwenden und IDLE wegwerfen.. macht nur Probleme. Such mal im Forum mach "Scite", da bekommst du viele gute Tipps dazu (F5 funktioniert dort übrigens auch).

Verfasst: Montag 12. Dezember 2005, 16:54
von mitsuhiko
Joghurt hat geschrieben:Entwickelst du vielleicht unter IDLE? Das benutzt ja Tkinter. Es kann vielleicht sein, dass zum ausführen dieselbe Interpreterinstanz benutzt wird, die auch die GUI bereitstellt, und in der mit from Tkinter import * alles in den globalen Namensraum importiert wurde.
Kann nicht sein. Die IDLE macht ein socket auf um mit der python shell zu kommunizieren. Die bekommt vom Frontend nichts mit.

Verfasst: Dienstag 13. Dezember 2005, 15:02
von Torsten2005
Leonidas hat geschrieben: Lieber dafür SceTE verwenden und IDLE wegwerfen.. macht nur Probleme. Such mal im Forum mach "Scite", da bekommst du viele gute Tipps dazu (F5 funktioniert dort übrigens auch).
cool thx, tooles programm , :)

Verfasst: Mittwoch 7. Januar 2009, 20:50
von numerix
Der Thread ist zwar schon steinalt, aber bei erneutem Lesen des Wiki-Beitrags zu IDLE, bei dem IDLE ziemlich schlecht wegkommt, habe ich mir mal die Mühe gemacht, einem dort für die "oftmals mit IDLE auftretenden Probleme" angeführten Link zu folgen, der zu diesem Thread führt, der als Beleg herhalten muss, dass IDLE mit Tkinter zusammen problematisch ist.

Nein, ist es nicht. Das Problem des OP ist einfach zu erklären. Wenn er IDLE ohne Subprocess startet (Parameter -n), dann merkt sich IDLE alle Importe, solange es nicht neu gestartet wird. Hat der OP also irgendwann in seiner IDLE-Sitzung mal ein

Code: Alles auswählen

from Tkinter import *
geschrieben und danach irgendwann mal

Code: Alles auswählen

import Tkinter
(evtl. sogar in einem anderen Quelltext), dann merkt sich IDLE den Sternchenimport und ein

Code: Alles auswählen

root = Tk() 
funktioniert dann scheinbar auch nach dem zweiten import.

Ein Fehler oder o.ä. von IDLE ist das nicht. Man muss es halt wissen. Zu Problemen führt das jedenfalls nicht.
Ich habe das jetzt zum Anlass genommen, den [wiki=IDLE]Wiki-Beitrag zu IDLE[/wiki] zu aktualisieren.
Ich warte immer noch auf ein konkretes Beispiel, wo ein Programm außerhalb von IDLE funktioniert und innerhalb von IDLE nicht. Bisher habe ich noch keins gesehen ...

Re: Fehler bei import ?????

Verfasst: Donnerstag 8. Januar 2009, 15:15
von Janux
...

Verfasst: Donnerstag 8. Januar 2009, 15:17
von str1442
Der Thread ist 3 Jahre alt ^_^. Und ein Modul ist nicht Callable.