Wenn Sie import X
tun, Sie ein Modul namens X
importieren. Ab diesem Zeitpunkt wird X
definiert.
Wenn Sie from X import *
tun, sind Sie nicht Import X
, Sie sind die Dinge nur importieren, die innerhalb von X
sind. X
selbst wird nicht definiert.
Wenn Sie also from tkinter.ttk import *
tun, sind Sie nicht ttk
importieren, die Sie importieren, nur die Dinge in ttk. Dies wird Dinge wie Label
, Button
usw. importieren, aber nichtttk
selbst.
Der richtige Weg ttk
in python3 zu importieren ist mit der folgenden Aussage:
from tkinter import ttk
Damit Sie das TTK-Label mit ttk.Label
verweisen können, die TTK-Taste als ttk.Button
usw.
Hinweis: tun from tkinter.ttk import *
ist gefährlich. Leider exportieren ttk
und tkinter
beide Klassen mit dem gleichen Namen. Wenn Sie beide from tkinter import *
und from tkinter.ttk import *
tun, werden Sie eine Klasse mit einer anderen überschreiben. Die Reihenfolge der Importe ändert die Verhaltensweise Ihres Codes.
Aus diesem Grund sollten - insbesondere bei tkinter und ttk, die jeweils mehrere überlappende Klassen haben - Wildcard-Importe vermieden werden. PEP8, die offizielle Python Style Guide, schreckt offiziell Wildcard Importe:
Wildcard imports (from import *) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.
Hinweis: Ihre Frage impliziert, Sie verwenden Python 3, aber im Falle verwenden Sie 2 Python einfach import ttk
tun können, eher als from tkinter import ttk
. ttk
in Python 3 verschoben.
Ich stimme der Antwort zu, aber wenn ich die Zeile von tkinter import ttk benutze, bekomme ich denselben Fehler 'Separator (self, orient = HORIZONTAL) .grid (row = 0, columspan = 5, sticky = "ew") NameError: name 'Separator' ist nicht definiert ', können Sie mir vorschlagen, diesen Fehler zu überwinden @ BryanOakley – sujit
@sujit: Verwenden 'ttk.Separator' –
Ich habe versucht, dass ich bekomme Fehler' Name ttk ist nicht definiert '@ Bryan – sujit