我希望在按下一个tkinter按钮时创建一个类的实例,然后在与其他tkinter按钮交互时能够从同一实例访问方法
我有控制电源设备单元(PSU)的代码,它包括一个名为PowerSupply
的类。我不会在这里显示所有内容,但这包括类中用于初始化各种属性的__init__
方法、用于搜索和连接PSU的connect
方法以及用于打开或关闭PSU输出的onstate
方法(逻辑1或0)。它还使用库pyvisa
import pyvisa
class PowerSupply:
def __init__(self):
"""Initialise attributes"""
self.name = ""
self.source_state = 0 # Output On/Off state
def connect(self):
"""Connect to SMU"""
rm = pyvisa.ResourceManager() # Set up resource manager
resource_list = rm.list_resources() # List of available instruments
Yoko_str = "0x0B21::0x001E" # VISA ID should contain this string
Yokogawa = [i for i, s in enumerate(resource_list) if Yoko_str in s]
if len(Yokogawa) == 0:
print("No Yokogawa supplies detected")
else:
ID = resource_list[Yokogawa[0]]
self.name = rm.open_resource(ID) # Open connection
print("Yokogawa supply detected")
def onstate(self, state):
"""Turn SMU On or Off"""
self.source_state = str(state) # Update source state attribute
self.name.write(":OUTPUT " + self.source_state) # Send command
这似乎工作得很好,因为我可以连接和打开/关闭仪器。例如,此代码将创建一个实例“smu”,连接到仪器并将其打开:
smu = PowerSupply()
smu.connect()
smu.onstate(1)
我接下来要做的是让一个tkinter按钮创建实例smu
并连接到PSU,并让另一个tkinter按钮使用此实例的onstate
方法打开/关闭PSU
我的“连接”按钮代码是:
btn_connect_dev = tk.Button(device_con_frame, text="Connect to Devices",
font=("Ariel", 11), command=connect_devices)
它执行函数connect_devices()
,本身:
def connect_devices():
smu = PowerSupply()
smu.connect()
return smu
我的“开/关”按钮代码:
btn_on_off = tk.Button(smu_ctrl_frame, text="Ouput ON/OFF", font=("Ariel", 11), command= smu.onstate(1))
但是这在那一行给了我一个错误NameError: name 'smu' is not defined
我不明白这一点,因为实例smu
应该由connect_devices()
函数返回。我猜smu
对另一个按钮不可用,但我不知道为什么不可用或如何使用,任何建议都会很好
目前没有回答
相关问题 更多 >
编程相关推荐