在我过去的编程中,我使用了以下代码:
from tkinter import *
Gui = Tk()
Run Code Online (Sandbox Code Playgroud)
但是有人告诉我,导入*因为很多原因不好,但现在我要导入了
from tkinter import geometry
Run Code Online (Sandbox Code Playgroud)
它说几何不是模块的东西(名称).
当我这样做时:
import tkinter
tkinter.geometry(500x500)
Run Code Online (Sandbox Code Playgroud)
它说'模块'对象没有属性'几何'
有人可以解释我如何用tkinter导入所有不同的方式?不仅几何,而且大多数tkinter模块... ???
那是因为模块 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您已经覆盖了对tkinter Label小部件的引用- 因此您无法再创建标签!当然,你不应该像这样大写局部变量,但为什么要担心在你可以这样做时避免这些命名空间问题:
import tkinter as TK
Run Code Online (Sandbox Code Playgroud)
这个^^^^导入方法也是首选,因为如果在某些时候你想要将Tkinter换成具有类似实现的另一个模块,而不是通过代码梳理Tkinter模块的所有元素,你可以这样做:
#import tkinter as TK
import newTkinter as TK
Run Code Online (Sandbox Code Playgroud)
而且你们都准备好了.或者,如果您想使用其他模块,其类和方法恰好具有一些相同的名称,以下将导致混乱:
from tkinter import *
from evilOverlappingModule import *
Run Code Online (Sandbox Code Playgroud)
但这没关系:
import tkinter as TK
import evilOverlappingModule as evil
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2410 次 |
| 最近记录: |