NameError使用Tkinter get()

时间:2016-11-15 02:52:44

标签: python python-3.x tkinter callback widget

我正在使用tkinter创建一个下拉菜单。它有一个子菜单" File"和命令"打开"使用一个条目允许用户键入要打开的文件的路径,然后单击按钮将其打开。目前我在点击按钮时尝试使用get()来检索条目文本,如下面的代码所示:

# Assign 5
from tkinter import *

def getFile():
'Displays the text in the entry'
print(E1.get())

def openFile():
'Creates enty widget that allows user file path and open it'
win = Tk()
#add label 
L1 = Label(win, text="File Name")
#display label
L1.pack()
#add entry widget
E1 = Entry(win, bd = 5)
#display entry
E1.pack(fill=X)
#create buttons 
b1 = Button(win, text="Open", width=10, command = getFile)
b2 = Button(win, text = "Cancel", width=10, command=win.quit)
#display the buttons
b1.pack(side = LEFT)
b2.pack(side = LEFT)

# create a blank window 
root = Tk()
root.title("Emmett's awesome window!")

#create a top level menu
menubar = Menu(root)  
# add drop down "File" menu with command "Open" to the menubar
fileMenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="File", menu=fileMenu)
fileMenu.add_command(label = "Open", command = openFile)    

# display the menu
root.config(menu=menubar)
root.mainloop()

但是我收到以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
File      "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1550, in __call__
return self.func(*args)
File "/Users/emmettgreenberg/Documents/2016/CS521/assign5/assign5_2.py", line  6, in getFile
print(E1.get())
NameError: name 'E1' is not defined

根据我的理解,当我调用 getFile 时,我不需要将 E1 作为参数传递。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

由于E1openFile()内的局部变量,因此无法在getFile()内访问。您可以E1全局或通过E1传递getFile()的内容:

def getFile(filename):
    print(filename)

def openFile():
    ...
    b1 = Button(win, text="Open", width=10, command=lambda: getFile(E1.get()))
    ...

或者您可以定义全局StringVar来保存文件名并将其与E1相关联:

def getFile():
    print(filename.get())

def openFile():
    ...
    E1 = entry(win, bd=5, textvariable=filename)
    ...

root = Tk()
filename = StringVar()

BTW,在win = Tk()内更好地将win = Toplevel()更改为openFile()

相关问题