Py, Vue and eel

How to develop application with these tools and how to use pyvueeel functions in such an app.

It’s recommended way to download project-starter where all the files for gui are already edited and ready to use. There are also working examples of calling from python to js and vice versa as well as example of alerting or plotting.

https://github.com/Malachov/pyvueeel/tree/master/content

If you want to build just what is necessary from scratch, you can use this tutorial. Go in web documentation on readthedocs if reading from IDE

Structure

- myproject
    - gui
        - generated with Vue CLI
    - app.py

app.py

import pyvueeel
from pyvueeel import expose

# Expose python functions to Js with decorator
@expose
def load_data(settings):
    return {'Hello': 1}
if __name__ == '__main__':
    pyvueeel.run_gui()

You can return dict - will be object in js You can return list - will be an array in js

Call js function from Py:

pyvueeel.eel.load_data()

gui

Generate gui folder with Vue CLI

npm install -g @vue/cli vue create gui

Goto folder and optionally:

vue add vuex
vue add vuetify
vue add router

main.js

if (process.env.NODE_ENV == 'development') {

try {
    window.eel.set_host("ws://localhost:8686");

} catch (error) {
    document.getElementById('app').innerHTML = 'Py side is not running. Start app.py with debugger.'
    console.error(error);
}

Vue.config.productionTip = true
Vue.config.devtools = true
} else {
Vue.config.productionTip = false
Vue.config.devtools = false
}

You can expose function to be callable from python. Import and then window.eel.expose(function_name, ‘function_name’)

.env

Create empty files .env.development and add VUE_APP_EEL=http://localhost:8686/eel.js

Create empty .env.production and add VUE_APP_EEL=eel.js

index.html

In public folder add to index.html:

<script type="text/javascript" src="<%= VUE_APP_EEL %>"></script>

vue.config.js ————-:

let devtool_mode

if (process.env.NODE_ENV === "development") {
  devtool_mode = "source-map";
} else {
  devtool_mode = false;
}

module.exports = {
  outputDir: "web_builded",
  transpileDependencies: ["vuetify"],
  productionSourceMap: process.env.NODE_ENV != "production",

  configureWebpack: {
    devtool: devtool_mode,
  },
};

Tips, tricks

VS Code plugins for developing

  • npm

  • vetur

  • Vue VSCode Snippets

  • vuetify-vscode