我正在尝试在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
答案 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)