Python 全局名称tkinter未定义?
下面显示的是tkinter登录窗口的代码,我试图在屏幕顶部显示一个徽标,但执行此操作时出现此错误:Python 全局名称tkinter未定义?,python,tkinter,Python,Tkinter,下面显示的是tkinter登录窗口的代码,我试图在屏幕顶部显示一个徽标,但执行此操作时出现此错误: NameError: global name 'tkinter' is not defined 这是我的全部代码: *原始代码在这里 谢谢 编辑后的代码(删除tkinter.): 这是因为您告诉tkinter以*的形式导入,这会将所有内容导入命名空间,而不管名称如何 在创建实例(如PhotoImage开始时,请丢失tkinter.),一切都将正常工作 但是,我强烈建议您将导入更改为import
NameError: global name 'tkinter' is not defined
这是我的全部代码:
*原始代码在这里
谢谢
编辑后的代码(删除tkinter.):
这是因为您告诉tkinter以*的形式导入,这会将所有内容导入命名空间,而不管名称如何 在创建实例(如
PhotoImage
开始时,请丢失tkinter.
),一切都将正常工作
但是,我强烈建议您将导入更改为
import tkinter as tk
,这样您可以指定tk.Label
,tk.PhotoImage
等,etc,您不必担心对象名称冲突或在使用每个对象之前必须写出完整的tkinter
。这是因为您告诉tkinter导入为*,这会将所有内容导入命名空间,而不管其名称如何
在创建实例(如PhotoImage
开始时,请丢失tkinter.
),一切都将正常工作
但是,我强烈建议您将导入更改为
import tkinter as tk
,这样您可以指定tk.Label
,tk.PhotoImage
等,etc,您不必担心对象名称冲突,也不必在使用每个对象之前写出完整的tkinter
。您已经使用*
导入了tkinter
中的所有内容。因此,您不需要执行tkinter.something
。仅供参考,使用模块导入中的*
不是一种好做法。我会试试看,谢谢!有关导入模块的不同方法及其优缺点,请参见问题/答案。DavidG和他所链接的问题。“星型”导入使代码更难阅读。它们会将所有这些名称转储到您的命名空间中。FWIW,Tkinter星形导入在Python3中引入136个名称,在Python2中引入175个名称。您已经使用*
导入了Tkinter中的所有内容。因此,您不需要执行tkinter.something
。仅供参考,使用模块导入中的*
不是一种好做法。我会试试看,谢谢!有关导入模块的不同方法及其优缺点,请参见问题/答案。DavidG和他所链接的问题。“星型”导入使代码更难阅读。它们会将所有这些名称转储到您的命名空间中。FWIW,Tkinter star导入在Python 3中引入136个名称,在Python 2中引入175个名称。感谢您推广使用import Tkinter as tk
。该窗口现在确实打开了,但是,图像没有显示,只是一个空白,请参见上面我编辑的代码。如果您无法理解,这是一个单独的问题,那么你应该提出另一个问题。这就是说,我注意到的第一件事是photo=PhotoImage(file=“logo.gif”)
将被垃圾收集,因此将该行更改为canvas.photo=PhotoImage(file=“logo.gif”)
,并将以下内容更改为canvas.create_image(0,0,image=canvas.photo)
感谢您推广使用import tkinter as tk
。现在窗口确实打开了,但是图像没有显示,只是显示在空白处,请参见上面我编辑的代码。这是一个单独的问题,如果您无法理解,那么您应该打开另一个问题。这就是说,我注意到的第一件事是photo=PhotoImage(file=“logo.gif”)
将被垃圾收集,因此将该行更改为canvas.photo=PhotoImage(file=“logo.gif”)
,并将以下内容更改为canvas.create_image(0,0,image=canvas.photo)
from tkinter import *
root = Tk()
root.title("Speed Wars Login")
def createInterface():
Label(root, text="Log in").grid(row=1, column=0)
Label(root, text="Create Account").grid(row=1, column=3)
#PLACE IMAGE
canvas = Canvas(root)
canvas.grid(row=0, column=2)
photo = PhotoImage(file = "logo.gif")
canvas.create_image(0, 0, image=photo)
Label(root, text="Username").grid(row=2, column=0)
Label(root, text="Password").grid(row=3, column=0)
global usrnm
global psswrd
usrnm = Entry(root, width = 15)
psswrd = Entry(root, show="*", width = 15)
usrnm.grid(row=2, column=1)
psswrd.grid(row=3, column=1)
def loginprint():
print("Username: %s\nPassword: %s" % (usrnm.get(), psswrd.get()))
createInterface()
Button(root, text="Login", command = loginprint).grid(row=3, column=0)
root.mainloop()