如何在不编译的情况下导入使用了MatLab引擎的Python脚本

7rfyedvj  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(161)

我正在编写一个使用Tkinter作为用户界面的PYTHON程序。我必须分隔python文件:interface.py和script.py。Py包含一段代码,该代码使用matLab.Engine模块调用一个matlab脚本。当我按下某个按钮时,即在我按下我的程序中的某个按钮后,它会运行在script.py中指定的matlab脚本。然而,当我运行interface.py时,即使我只是导入了script.py而没有实际调用它的函数,它仍然在程序启动时启动matLab.Engine,因为我知道当我导入它时,它会编译并干扰script.py。我需要的是在我希望调用的时候而不是在程序启动期间调用在script.py中的函数中编写的matLab.Engine。
下面是script.py:

import matlab.engine

def implement():

  eng = matlab.engine.start_matlab()
  eng.matlab_script(nargout=0)
  eng.quit()

以下是包含该函数和按钮的interface.py片段:

def analyze():
        import script
        script.implement()
        
analyzeButton = Button(self, text = "Analyze ->", bg='#0D0628', width=10, height=2, command = analyze())
k3bvogb1

k3bvogb11#

当您执行此行代码时:

analyzeButton = Button(self, text = "Analyze ->", bg='#0D0628', 
                       width=10, height=2, command = analyze())

您实际上正在运行analyze函数,该函数将启动matlab引擎并运行您的matlab脚本。
在Python中,analyze是对函数的引用,analyze()调用该函数。您希望设置command=analyze,而不是command=analyze()。前者将把函数引用传递给按钮构造函数,后者将运行函数并将函数的返回值传递给按钮构造函数。

相关问题