我正在使用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 作为参数传递。我该如何解决这个问题?
答案 0 :(得分:1)
由于E1
是openFile()
内的局部变量,因此无法在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()
。