2017-10-12 123 views
0

下面顯示的是一個Tkinter的登錄窗口中的代碼,我試圖得到一個標誌,以顯示在屏幕的頂部,但得到這個錯誤,當這樣做:全局名稱tkinter未定義?

NameError: global name 'tkinter' is not defined 

這裏是我完整的代碼:

*原代碼在這裏

感謝

代碼後EDIT(移除Tkinter的):

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() 
+1

你用'*'導入了'tkinter'中的所有東西。因此你不需要做'tkinter.something'。僅供參考,使用'from module import *'不是很好的做法。 – DavidG

+0

我會盡力的,謝謝! – RossC

+1

查看[this](https://stackoverflow.com/questions/710551/import-module-or-from-module-import)問題/回答不同的方式導入模塊及其優點/缺點 – DavidG

回答

2

這是因爲你告訴tkinter導入爲*,它將所有內容都導入命名空間,而不管它的名字如何。

在創建像PhotoImage這樣的實例的開始處丟失tkinter.,一切都將生效。

不過,我會強烈建議您改爲更改導入到import tkinter as tk,您可以指定tk.Labeltk.PhotoImage,等等等等這種方式,你會不會擔心對象名稱發生衝突或有寫出來的全每個對象使用前的tkinter

+0

感謝您推薦使用'import tkinter as tk'。 –

+0

窗口現在打開,但是,圖像不顯示,只是一個空白的地方,看到我上面編輯的代碼。 – RossC

+0

這是一個單獨的問題,如果你不知道,那麼你應該打開另一個問題。 這就是說,我注意到的第一件事是'photo = PhotoImage(file =「logo.gif」)'將被垃圾收集,因此將該行更改爲'canvas.photo = PhotoImage(file =「logo.gif」 )'和下面的'canvas.create_image(0,0,image = canvas.photo)' –