7

在我过去的编程中,我使用了以下代码:

from tkinter import *
Gui = Tk()

但有人告诉我,由于很多原因,导入 * 并不好,但现在我想导入

from tkinter import geometry

它说几何不是模块的东西(名称)。

当我这样做时:

    import tkinter 
tkinter.geometry(500x500)

它说“模块”对象没有属性“几何”

有人可以向我解释如何使用 tkinter 以所有不同的方式导入吗?不仅适用于几何,而且适用于大多数 tkinter 模块......???

4

6 回答 6

9

那是因为模块 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

您已经覆盖了对 tkinterLabel小部件的引用 - 所以您不能再创建任何标签!当然,无论如何您都不应该像这样大写局部变量,但是当您可以这样做时,为什么还要担心避免这些命名空间问题:

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
于 2013-08-20T14:46:12.347 回答
2

from module import *被认为有害的原因是它用模块中的每个公共名称污染了主命名空间。充其量这会使代码不那么明确,在最坏的情况下,它可能会导致名称冲突。例如,模块定义codecs了一个open方法,并且有内置版本,它们采用不同的参数。如果我写

from codecs import *
f = open(…)

我会得到哪个open?Tkinter 有很多符号,基于 tkinter 的程序倾向于大量使用它们。比现在import *更好

import tkinter as tk

然后允许 - 仍然是明确的,但更容易输入和阅读:

tk.Tk().geometry(…)
于 2013-08-20T14:49:06.540 回答
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()
于 2013-08-20T14:47:43.707 回答
0

我不知道为什么有人说导入 * 不好,因为这不是真的,它实际上比只导入 tkinter 更好。导入*将使编程更容易。仅使用 tkinter,您需要tkinter.在做某事之前输入,或者如果您以 tk 的方式进行操作,您将需要做tk.,from tkinter import *是您能做的最好的事情。

于 2019-04-06T18:06:17.693 回答
0

这是一个快速的答案:Tkinter 没有几何功能。您可以将几何函数与 Tk() 类的实例一起使用。例子:

import tkinter as tk # Use the module name ’Tkinter’ if you have Python 2
root = tk.Tk()
root.geometry(‘500x500’) # You can change the size 

# Other code goes here

root.mainloop()

就像几何函数一样,mainloop、pack、grid、place、config 等函数与类 Tk() 的实例一起使用

谢谢你!希望有效!

于 2021-09-25T09:27:33.540 回答
0

而不是这样做:

from tkinter import *

你可以做:

from tkinter import Tk, Canvas #The widgets you want to use

或者:

import tkinter as tk
于 2019-12-31T01:17:44.133 回答