如何将df变量设为Python类属性,使其可在多个方法中调用?
解决AttributeError: 'AcousticResponse' object has no attribute 'df'的问题
错误根源有两个可能:一是调用SignalPath时,open_file还未被触发执行,导致self.df从未被赋值;二是两个按钮绑定了不同的AcousticResponse实例,文件加载到一个实例的df中,另一个实例无法访问。以下是具体解决方案:
1. 在类初始化时提前声明df属性
在AcousticResponse的__init__方法中初始化self.df为None,确保实例始终拥有该属性,避免直接访问时抛出AttributeError:
from tkinter import filedialog as fd import pandas as pd class AcousticResponse(): def __init__(self): # 初始化df属性,确保实例创建时就存在该属性 self.df = None def open_file(self): """ 加载JSON测量配置文件 """ filetypes = [("Json File", "*.json")] filenames = fd.askopenfilename(title="Open File", filetypes=filetypes) self.df = pd.read_json(filenames) def SignalPath(self): # 先检查配置文件是否已加载 if self.df is None: print("请先加载JSON配置文件!") return # 也可以替换为tkinter弹窗提示 APx = APx500_Application() APx.Visible = True APx.SignalPathSetup.OutputConnector.Type = OutputConnectorType.AnalogBalanced APx.SignalPathSetup.InputConnector.Type = InputConnectorType.AnalogBalanced APx.SignalPathSetup.Measure = MeasurandType.Acoustic input1 = APx.SignalPathSetup.InputSettings(APxInputSelection.Input1) input1.Channels[0].Name = "Mic" input1.Channels[0].Sensitivity.Value = float(self.df["sensitivity_value_mic"][0])
2. 确保两个按钮绑定同一个类实例
在另一个.py文件中,必须创建同一个AcousticResponse实例,再将按钮命令绑定到该实例的方法。如果创建多个实例,一个实例加载的df无法被其他实例访问:
# 另一个.py文件的按钮绑定示例 import tkinter as tk from your_module import AcousticResponse # 替换为AcousticResponse所在的模块名 root = tk.Tk() # 创建唯一的AcousticResponse实例 acoustic_app = AcousticResponse() # 绑定按钮到同一个实例的方法 btn_open = tk.Button(root, text="加载配置文件", command=acoustic_app.open_file) btn_open.pack() btn_run = tk.Button(root, text="设置信号路径", command=acoustic_app.SignalPath) btn_run.pack() root.mainloop()
内容的提问来源于stack exchange,提问作者fauzan-mhd
相关产品推荐
相关产品推荐

