仍在学习Python,此处是菜鸟问题。我正在构建一个简单的tkinter GUI,该GUI加载JSON数据,然后允许用户选择加载的数据进行绘图。这是我的体系结构和问题的说明:
1)在GUI中,我有一个加载按钮,该按钮调用一个函数LoadData,以打开包含多个JSON txt文件的目录
2)LoadData检查是否存在某个文件名“ AutoPilot.txt”,如果存在,则调用另一个函数LoadAutopilotData
3)LoadAutopilotData创建一个Data类的实例,并使用JSON数据填充它。
功能完成后,我想访问在内部作用域(APtime)中创建的Data类的实例,但似乎无法做到这一点。
文件1片段:
loadBtn = Button(toolbar, image=useImg1, command=LoadData)
文件2片段:
def LoadData() :
# Get data Path from the User
path = askdirectory()
# Go to that directory
os.chdir(path)
# Check directory to see if AutoPilot.log is available
try:
Autopilot = open("AutoPilot.txt")
Load_Autopilot = True
except:
Load_Autopilot = False
# If Autopilot data exists, load it and populate the listbox
if Load_Autopilot == True:
LoadAutopilotData()
print(APtime.val)
文件3片段:
def LoadAutopilotData() :
filedata = open( 'AutoPilot.txt' )
if len( sys.argv) >= 2:
controller = sys.argv[1]
APtime = Data("Time", [], "sec")
其中File3继续填充Data类的实例。我遇到的问题是我只能在File3中访问APtime,而不能在“更高”级别的函数中访问。任何帮助是极大的赞赏。谢谢!
答案 0 :(得分:0)
您需要做的是向调用函数返回一个值。您可以在Python网站上的Defining functions上的教程部分中找到有关此内容的更多信息。
因此,如果我们不对您的代码进行过多更改,则可能会出现以下情况:
解决方案1:文件2片段
def LoadData() :
# Get data Path from the User
path = askdirectory()
# Go to that directory
os.chdir(path)
# Check directory to see if AutoPilot.log is available
try:
Autopilot = open("AutoPilot.txt")
Load_Autopilot = True
except:
Load_Autopilot = False
# If Autopilot data exists, load it and populate the listbox
if Load_Autopilot == True:
APtime = LoadAutopilotData()
print(APtime.val)
解决方案1:归档3个片段
def LoadAutopilotData() :
filedata = open( 'AutoPilot.txt' )
if len( sys.argv) >= 2:
controller = sys.argv[1]
APtime_result = Data("Time", [], "sec")
return APtime_result
LoadData()
将函数LoadAutopilotData()
返回的值分配给APtime
变量(行APtime = LoadAutopilotData()
)LoadAutopilotData()
处理完数据后,它使用语句return APtime_result
使该值可供调用函数使用。但是您的代码可以做一些改进。我唯一要提到的是,您应该阅读Standard Library中的内容,因为它可以节省您一些工作。例如,要检查文件是否存在,已经有一个function。
因此您的File 2代码段可能看起来像这样:
import os.path
def LoadData() :
# Get data Path from the User
path = askdirectory()
Load_Autopilot = os.path.exists(path)
# If Autopilot data exists, load it and populate the listbox
if Load_Autopilot:
APtime = LoadAutopilotData()
print(APtime.val)