NameError:使用多个文件和Tkinter时,未定义全局名称“名称”

时间:2019-05-12 05:51:02

标签: python tkinter

我正在尝试在Tkinter的“条目”框中显示已访问文件的文件路径。由于此任务的要求,我必须在一个文件中定义所有功能,并在另一个文件中定义所有Tkinter字段,然后将这些功能导入Tkinter文件。

我尝试将所有代码放在一个文件中,以查看是否引起任何问题,并且工作正常。问题在于该任务要求我使用单独的.py文件。

def open_file():
    filePath = askopenfilename()

    with open(filePath, 'rU') as anotherFile:
        inputString = anotherFile.read()

    filePathEntry.delete(0, END)
    filePathEntry.insert(0, filePath)

在另一个文件中:

from AT3_Functions_v2 import *
main = Tk()
main.geometry("600x400")
openfile = Button(main, text="Open Scoresheet", command=open_file).grid(row=0, column=0)
filePathEntry = Entry(main)
filePathEntry.grid(row=0, column=1)
mainloop()

当我将两段代码都放在一个文件中时,它可以正常工作,但是当我再次将其分开时,会出现以下错误:

NameError: global name 'filePathEntry' is not defined

1 个答案:

答案 0 :(得分:0)

将所有代码放在一个文件中时,您的 open_file 函数可以找到 filePathEntry 变量。但是,当您将代码分成两个脚本时, open_file 无法找到 filePathEntry ,因为它位于不同的文件中。

要解决此问题,您需要使用 lambda 函数在 open_file 函数中传递参数,然后从另一个文件中放置传递 filePathEntry 变量。我为你做了。

script_one.py

from tkinter import *
from script_two to import *

main = Tk()
main.geometry("600x400")
filePathEntry = Entry(main)
filePathEntry.grid(row=0, column=1)
openfile = Button(main, text="Open Scoresheet", command=lambda: (open_file(filePathEntry))).grid(row=0, column=0)   # Passing arugument to open_file function which is in script_two.py
mainloop()

script_two.py

from tkinter import *
from tkinter import filedialog


def open_file(entry_box):   # Passing argument to access filePathEntry variable from script_one.py
    filePath = filedialog.askopenfilename()

    with open(filePath, 'rU') as anotherFile:
        inputString = anotherFile.read()

    entry_box.delete(0, END)
    entry_box.insert(0, filePath)