[英]Accessing python class attributes in higher scope
仍在學習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,而不能在“更高”級別的函數中訪問。 任何幫助是極大的贊賞。 謝謝!
您需要做的是向調用函數返回一個值。 您可以查看Python網站上有關定義函數的教程部分,以獲取有關此內容的更多詳細信息。
因此,如果我們不對您的代碼進行過多更改,則可能會出現以下情況:
解決方案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
使該值可用於調用函數。 但是您的代碼中可以做一些改進。 我唯一要提到的是您應該閱讀標准庫中的內容,因為它可以節省您一些工作。 例如,要檢查文件是否存在,有一個已經存在的功能 。
因此,您的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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.