在我过去的编程中,我使用了以下代码:
from tkinter import *
Gui = Tk()
但是有人告诉我导入*因为很多原因不好,但现在我想导入
from tkinter import geometry
它表示几何不是模块(名称)。
当我这样做时:
import tkinter
tkinter.geometry(500x500)
它说'模块'对象没有属性'几何'
有人可以解释我如何用tkinter导入所有不同的方法?不仅是几何形状,还有大多数tkinter模块...... ???
答案 0 :(得分:6)
这是因为模块 tkinter
没有geometry
功能。它是Tk
实例。
这是完成你想要做的事情的好方法:
import tkinter as TK # TK is a convenient, easy to type alias to use for tkinter.
gui = TK.Tk()
gui.geometry("500x500") # don't forget the quotes
from tkinter import *
是导入tkinter的非理想方式顺便说一下,无论谁告诉你from tkinter import *
是个坏主意都是正确的 - 当你这样做时,你将所有tkinter的命名空间加载到模块的命名空间中。
如果你这样做,你最终可能会遇到令人不快的命名空间冲突,如下所示:
from tkinter import *
gui = Tk()
Label = "hello"
Label1 = Label(gui, text=Label)
# Traceback (most recent call last):
# File "stackoverflow.py", line 98, in <module>
# Label1 = Label(gui, text=Label)
# TypeError: 'str' object is not callable
您已覆盖对tkinter的Label
小部件的引用 - 因此您无法再创建标签!当然你不应该像这样大写局部变量,但是为什么要担心在你可以这样做时避免那些命名空间问题:
import tkinter as TK
这个^^^^导入方法也是首选,因为如果在某些时候你想要将Tkinter换成另一个具有类似实现的模块,而不是通过代码梳理Tkinter模块的所有元素,你可以去像这样:
#import tkinter as TK
import newTkinter as TK
你们都准备好了。或者,如果您想使用其他模块,其类和方法恰好具有一些相同的名称,以下将导致混乱:
from tkinter import *
from evilOverlappingModule import *
但这没关系:
import tkinter as TK
import evilOverlappingModule as evil
答案 1 :(得分:1)
from module import *
被认为有害的原因是它使用模块中的每个公共名称污染主命名空间。充其量这会使代码更不明确,最糟糕的是,它可能导致名称冲突。例如,模块codecs
定义了open
方法,并且内置版本采用不同的参数。如果我写
from codecs import *
f = open(…)
我会得到open
? Tkinter有一个很多的符号,而基于tkinter的程序往往会非常频繁地使用它们。优于import *
import tkinter as tk
然后允许 - 仍然显式,但更容易键入和读取:
tk.Tk().geometry(…)
答案 2 :(得分:0)
如果您*
导入了tkinter,那么tkinter.
基本上位于命名空间中,这意味着访问tkinter模块而不必担心用tkinter.
作为前缀。在这种情况下,geometry("500x500")
是Tk()
的方法,因此您可以像这样使用
from Tkinter import *
Gui = Tk()
Gui.geometry("500x500")
Gui.mainloop()
类似的对象,例如各种小部件等,使用相同的。例如,标签将如下所示:
from Tkinter import *
Gui = Tk()
label= Label(Gui, text="Hello World!")
label.pack()
Gui.mainloop()
答案 3 :(得分:0)
我不知道为什么有人说导入*不是很好的原因,这是不正确的,实际上比仅导入tkinter更好。导入*
将使编程更加容易。仅使用tkinter,您需要在做某事之前输入tkinter.
,或者如果您将其作为tk进行,则需要做tk.
,from tkinter import *
是您所能做的最好的事情。 / p>
答案 4 :(得分:0)
代替:
from tkinter import *
您可以这样做:
from tkinter import Tk, Canvas #The widgets you want to use
或者仅仅是:
import tkinter as tk