Python Tkinter导入时没有*?
在我过去的编程中,我使用了以下代码:Python Tkinter导入时没有*?,python,tkinter,Python,Tkinter,在我过去的编程中,我使用了以下代码: from tkinter import * Gui = Tk() 但有人告诉我,出于很多原因,导入*并不好,但现在当我想导入时 from tkinter import geometry 它表示几何体不是模块(名称) 当我这样做的时候: import tkinter tkinter.geometry(500x500) 它表示“模块”对象没有“几何体”属性 有人能告诉我如何用tkinter以各种不同的方式导入吗??不仅是几何图形,而且大多数tki
from tkinter import *
Gui = Tk()
但有人告诉我,出于很多原因,导入*并不好,但现在当我想导入时
from tkinter import geometry
它表示几何体不是模块(名称)
当我这样做的时候:
import tkinter
tkinter.geometry(500x500)
它表示“模块”对象没有“几何体”属性
有人能告诉我如何用tkinter以各种不同的方式导入吗??不仅是几何图形,而且大多数tkinter模块…?这是因为模块
tkinter
没有几何图形功能。是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
为什么从tkinter导入的*
不是导入tkinter的理想方式
顺便说一句,告诉您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
#import tkinter as tk
import newTkinter as tk
from Tkinter import *
Gui = Tk()
label= Label(Gui, text="Hello World!")
label.pack()
Gui.mainloop()
这种^^^^^导入方法也是可取的,因为如果您想在某个时候将Tkinter换成另一个具有类似实现的模块,而不是为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
#import tkinter as tk
import newTkinter as tk
from Tkinter import *
Gui = Tk()
label= Label(Gui, text="Hello World!")
label.pack()
Gui.mainloop()
你们都准备好了。或者,如果您想使用另一个模块,而该模块的类和方法恰好具有一些相同的名称,则以下操作将导致混乱:
from tkinter import *
from evilOverlappingModule import *
但这很好:
import tkinter as tk
import evilOverlappingModule as evil
如果您*
导入了tkinter,则实际上tkinter.
位于命名空间中,这意味着您可以访问tkinter模块,而无需担心在其前面加上tkinter.
。在本例中,geometry(“500x500”)
是Tk()
的一种方法,因此您可以这样使用它
from Tkinter import *
Gui = Tk()
Gui.geometry("500x500")
Gui.mainloop()
类似的对象,如各种小部件等,都是同样使用的。例如,标签的制作方式如下:
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
#import tkinter as tk
import newTkinter as tk
from Tkinter import *
Gui = Tk()
label= Label(Gui, text="Hello World!")
label.pack()
Gui.mainloop()
模块导入*
中的被认为是有害的,原因是它用模块中的每个公共名称污染了主名称空间。最好的情况下,这会使代码不那么明确,最坏的情况下,它会导致名称冲突。例如,模块编解码器
定义了一个打开
方法,并且有内置版本,它采用不同的参数。如果我写
from codecs import *
f = open(…)
我将得到哪个打开的?Tkinter有很多符号,基于Tkinter的程序往往大量使用它们。比导入*
更好
import tkinter as tk
然后允许-仍然是显式的,但更易于键入和读取:
tk.Tk().geometry(…)
我不知道为什么有人说导入不好,因为那不是真的,它实际上比导入tkinter要好。导入*
将使编程更容易。使用tkinter,您需要在做某事之前键入tkinter.
,或者如果您是作为tk来做的,则需要执行tk.
,tkinter导入的是您能做的最好的操作。而不是:
from tkinter import *
你可以做:
from tkinter import Tk, Canvas #The widgets you want to use
或:
无论您使用什么导入,在tkinter
中都没有几何体。你真的是指Gui.geometry
(tkinter.Tk.geometry
)?事实上,tkinter import*
中的被认为是可以的,即使它与PEP8相矛盾,请参阅:我建议使用。。。作为tk而不是。。。作为TK
,仅仅是因为TK
看起来更像类名而不是模块名,而且它更显眼。虽然有点晚,但我同意。在tk中替换tk.from tkinter import*和from tkinter import tk将使编程更容易,因为您不必执行tk.Button,只需执行按钮即可