J'essaie d'écrire une application de bureau multiplate-forme à l'aide de technologies Web (HTML5, CSS et JS). J'ai jeté un coup d'œil à certains frameworks et décidé d'utiliser le framework Electron.
J'ai déjà créé l'application en Python, donc je veux savoir s'il est possible d'écrire des applications de bureau multiplateformes en utilisant Python sur le framework Electron?
Je vous remercie
Il est possible de travailler avec Electron, mais si vous recherchez des fonctionnalités d’interface utilisateur «Webbish», vous pouvez vérifier Flexx - vous permet de coder en Python pur tout en utilisant le style et la flexibilité d’interface utilisateur des outils de développement Web.
Si vous insistez pour aller sur Electron, vous devriez suivre l’idée de ceci post .
Tout d’abord, assurez-vous que tout est installé:
pip install Flask
npm install electron-prebuilt -
npm install request-promise -g
Maintenant, créez le répertoire dans lequel vous voulez que toute la magie se produise et incluez les fichiers suivants
Créez votre hello.py
:
from __future__ import print_function
import time
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World! This is powered by Python backend."
if __== "__main__":
print('oh hello')
#time.sleep(5)
app.run(Host='127.0.0.1', port=5000)
Créez votre package.json
de base:
{
"name" : "your-app",
"version" : "0.1.0",
"main" : "main.js",
"dependencies": {
"request-promise": "*",
"electron-prebuilt": "*"
}
}
Enfin, créez votre main.js
:
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
electron.crashReporter.start();
var mainWindow = null;
app.on('window-all-closed', function() {
//if (process.platform != 'darwin') {
app.quit();
//}
});
app.on('ready', function() {
// call python?
var subpy = require('child_process').spawn('python', ['./hello.py']);
//var subpy = require('child_process').spawn('./dist/hello.exe');
var rq = require('request-promise');
var mainAddr = 'http://localhost:5000';
var openWindow = function(){
mainWindow = new BrowserWindow({width: 800, height: 600});
// mainWindow.loadURL('file://' + __dirname + '/index.html');
mainWindow.loadURL('http://localhost:5000');
mainWindow.webContents.openDevTools();
mainWindow.on('closed', function() {
mainWindow = null;
subpy.kill('SIGINT');
});
};
var startUp = function(){
rq(mainAddr)
.then(function(htmlString){
console.log('server started!');
openWindow();
})
.catch(function(err){
//console.log('waiting for the server start...');
startUp();
});
};
// fire!
startUp();
});
Tiré du message lui-même - sont les notes suivantes
Notez que dans main.js, nous générons un processus enfant pour une application Python. Ensuite, nous vérifions si le serveur est en ligne ou pas en utilisant une boucle illimitée (bon, mauvaise pratique! Nous devrions en fait vérifier le temps requis et casser la boucle après quelques secondes). Une fois le serveur installé, nous construisons une fenêtre électronique réelle pointant vers la nouvelle page d'index du site Web local.
Vous pouvez utiliser les modules nodejs dans Electron. Découvrez https://github.com/JeanSebTr/node-python . Je n'ai aucune expérience personnelle avec cela, mais c'est peut-être ce que vous recherchez.
Je cherchais des alternatives à l’électron en utilisant python et j’ai trouvé CEF Python Ses liaisons en python pour le Chromium Embedded Framework. CEF est une sorte d’électron pour Python https://github.com/cztomczak/cefpython
Vous pouvez utiliser python-Shell pour communiquer entre Python et Node.js/Electron.
python-Shell offre un moyen simple d’exécuter des scripts Python à partir de Node.js avec une communication interprocessus simple et efficace et une meilleure gestion des erreurs.
En utilisant python-Shell, vous pouvez:
Dans votre terminal, assurez-vous que vous vous trouvez dans le dossier racine de votre projet et exécutez la commande suivante pour installer python-Shell à partir de npm:
npm install --save python-Shell
Vous pouvez ensuite simplement exécuter un shell Python en utilisant:
var pyshell = require('python-Shell');
pyshell.run('hello.py', function (err, results) {
if (err) throw err;
console.log('hello.py finished.');
console.log('results', results);
});
Voir plus d'informations de ce tutorial