Fehler bei import ?????

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
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

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

:?
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Tkinter includiert man oft mit

Code: Alles auswählen

from Tkinter import *
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wobei das immer eine schlechte wahl ist... Siehe auch: http://pythonwiki.pocoo.org/Modul_Import

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

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 :)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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']
TUFKAB – the user formerly known as blackbird
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

dann versteh ich nicht , warum es vorher ging , und dann auf einmal nicht mehr ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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.
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

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ß
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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.
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

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 , :)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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 ...
Janux
User
Beiträge: 78
Registriert: Donnerstag 12. Juni 2008, 21:11

...
Zuletzt geändert von Janux am Donnerstag 8. Januar 2009, 15:21, insgesamt 1-mal geändert.
mfg ... Janux
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Der Thread ist 3 Jahre alt ^_^. Und ein Modul ist nicht Callable.
Antworten