2013-09-21 42 views
-1

我收到以下錯誤:Python和Tkinter的:NameError:全局名稱 'roomChange' 沒有定義

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__ 
    return self.func(*args) 
    File "D:\COMPUTER SCIENCE\Seating Plan\SeatingPlan TEST.py", line 205, in displayText 
    if roomChange.get().strip() == "": 
NameError: global name 'roomChange' is not defined 

當試圖運行下面的代碼:

from tkinter import * 
import tkinter.messagebox 

def displayText(): 
    """ Display the Entry text value. """ 

    global roomChange 


    if roomChange.get().strip() == "": 
     tkinter.messagebox.showerror("Invalid Value", "Please enter a valid classroom name.") 
    else: 
     tkinter.messagebox.showinfo("Temporary Window", "Text value = " + roomChange.get().strip()) 

def roomChanger(): 

    chrm = Tk() 
    chrm.title("Change Room") 
    chrm.wm_iconbitmap('./Includes/icon.ico') 
    chrm["padx"] = 40 
    chrm["pady"] = 20  

    # Create a text frame to hold the text Label and the Entry widget 
    textFrame = Frame(chrm) 

    #Create a Label in textFrame 
    roomChangeLabel = Label(textFrame) 
    roomChangeLabel["text"] = "Enter name of classroom: " 
    roomChangeLabel.pack(side=LEFT) 

    # Create an Entry Widget in textFrame 
    roomChange = Entry(textFrame) 
    roomChange["width"] = 50 
    roomChange.pack(side=LEFT) 

    textFrame.pack() 

    roomChangeButton = Button(chrm, text="Submit", command=displayText) 
    roomChangeButton.pack() 

    chrm.mainloop() 


testButton = Button(window, text='Change Room', command=roomChanger) 
testButton.place(x = 825, y = 360) 

任何人都可以提出解決我的問題? 感謝

+1

你永遠不分配'roomChange'任何東西,你只是全球化它 – Serial

+0

你應該投入一些精力去理解錯誤,並要求在此之前調查問題。 – user4815162342

+0

@ user4815162342:變量在Python函數中標記爲本地或全局的方式對Google來說不一定很容易。 –

回答

1

roomChanger()分配給roomChange

roomChange = Entry(textFrame) 

,所以你需要標記該名稱作爲一個全球性的該功能太內部。在該函數中添加global roomChange聲明。

displayText()另一方面,從來沒有試圖分配給roomChange和該函數中的global語句可以安全地刪除。

+0

謝謝Martijn Pieters。和user4815162342,我一直在努力了幾個小時.. –

+0

我會接受答案,當網站允許我:) –

-2

我有同樣的問題。

這裏是我的解決辦法:

from tkinter import * 
from tkinter import messagebox 

某種命名空間毛刺。第二行不應該是必要的。從語法角度來看,技術上import *也意味着導入messagebox,因爲它是其中的一部分。

使用這兩條線,拿走import tkinter.messagebox

+0

該問題與導入沒有任何關係;這個答案沒有解決被問到的問題。 –

+0

@Jacob如果你轉到硬盤上的tkinter文件夾(通常在'C:\ Pythonxx \ Lib \ tkinter'中找到),你會在那裏看到大約十幾個.py的文件。這些文件不會通過'from tkinter import *'自動導入。它們必須按名稱明確導入。這就是爲什麼'tkinter import messagebox'是必需的。例如,如果你想讓用戶從他們的計算機中選擇一個文件,你可以使用'from tkinter import filedialog'來實現這一點。 –

相關問題