我正在尝试编写一些 Python 代码来控制一些使用 pyvisa 的仪器。我是 Python 新手,所以请多多包涵。我有一些有效的代码,但我真的很难弄清楚如何将它与基于 tkinter 的 GUI 接口。
对于我的工作代码,我有一个包含Main.py
主代码的主文件 ( ) 和两个模块 (powermeter.py
和powersupply.py
),其中包含用于连接两个仪器的函数。这工作正常。此处显示了一些示例代码,为简单起见,我仅显示了与一种仪器(电源)相关的代码。connect()
来自模块 powersupply.py 的一个功能(再次,为了简单起见仅显示一个)是:
def connect(resource_manager, ID):
"""Open a connection to the supply"""
instrument_name = resource_manager.open_resource(ID)
return instrument_name
主程序在可用的 VISA 仪器列表中搜索与我对我们使用的仪表品牌/型号的期望相匹配的 VISA ID。这被保存到变量ThorID
中。
import pyvisa
import powermeter
rm = pyvisa.ResourceManager() # Set up resource manager
resource_list = rm.list_resources() # Create a list of available instruments
""" Establish connection to power meter """
Thor_str = "0x1313::0x8079" # Power meter ID should contain this string
Thor = [i for i, s in enumerate(resource_list) if Thor_str in s]
if len(Thor) == 0:
print("No Thor Labs power meter detected")
ThorID = ""
else:
ThorID = resource_list[Thor[0]] # This is the Thor Labs VISA ID
print("Thor Labs power meter detected")
然后,我可以使用该函数connect()
在找到仪表后连接到仪表,然后返回变量pm
,(据我所知)这是其他函数所需的完整 VISA 资源名称/ID(此处未显示):
pm = powermeter.connect(rm, ThorID) # Open a connection to the Power Meter
到目前为止,一切都很好。但是,在考虑如何将其集成到 GUI 时,我的理解完全崩溃了。在 GUI 中有一个按钮 ( tk.Button
) Connect to device。当我按下这个按钮时,本质上我想执行命令pm = powermeter.connect(rm, ThorID)
,建立连接并返回变量pm
。但是tkinter
要我使用语法command = function_name()
,我知道语法command = pm = powermeter.connect(rm, ThorID)
不对!
我尝试在主程序中定义另一个函数,称为 eg connect_instruments()
。但是,这似乎也是错误的方法,因为它似乎在我按下按钮之前就执行了!
如果有人可以在这里提供一些建议,那就太好了。老实说,我发现这令人难以置信的混乱,即使我想做的事情(按下此按钮时执行此代码)看起来很简单!