wake-up-neo.com

Python on Electron Framework

Ich versuche, eine plattformübergreifende Desktop-App zu schreiben, die Web-Technologien (HTML5, CSS und JS) verwendet. Ich habe mir einige Frameworks angesehen und beschlossen, das Electron-Framework zu verwenden. 

Ich habe die App bereits in Python erstellt. Ich möchte also wissen, ob plattformübergreifende Desktopanwendungen mit Python im Electron-Framework möglich sind.

Vielen Dank

14
A Junior

Es ist möglich, mit Electron zu arbeiten. Wenn Sie jedoch nach "Webbish" - UI-Funktionen suchen, können Sie Flexx überprüfen. Mit diesem Programm können Sie in reinem Python programmieren, jedoch die Flexibilität der Web-Entwicklungstools mit Stil und UI verwenden.

Wenn Sie darauf bestehen, auf Electron zu gehen, sollten Sie der Idee von post folgen.

Stellen Sie zunächst sicher, dass Sie alles installiert haben:

pip install Flask
npm install electron-prebuilt -
npm install request-promise -g

Erstellen Sie nun das Verzeichnis, in dem Sie die ganze Magie ausführen möchten, und fügen Sie die folgenden Dateien hinzu

Erstellen Sie Ihren 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)

Erstellen Sie Ihren grundlegenden package.json:

{
  "name"    : "your-app",
  "version" : "0.1.0",
  "main"    : "main.js",
  "dependencies": {
    "request-promise": "*",
    "electron-prebuilt": "*"
  }
}

Erstellen Sie schließlich Ihren 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();
});

Aus dem Beitrag selbst entnommen - sind die folgenden Hinweise

Beachten Sie, dass in main.js ein untergeordneter Prozess für eine Python-Anwendung erzeugt wird. Dann prüfen wir, ob der Server mit einer unbegrenzten Schleife in Betrieb war oder nicht (nun, schlechte Praxis! Wir sollten tatsächlich die benötigte Zeit überprüfen und die Schleife nach einigen Sekunden unterbrechen). Nachdem der Server hochgefahren ist, erstellen wir ein tatsächliches Elektronenfenster, das auf die neue Indexseite der lokalen Website zeigt.

23
bluesummers

Sie können nodejs-Module innerhalb von Electron verwenden. Check out https://github.com/JeanSebTr/node-python . Ich habe keine persönlichen Erfahrungen damit, aber es ist vielleicht das, wonach Sie suchen.

24
Jeffrey

Ich suchte mit Python nach Alternativen zu Elektronen und fand die Python-Bindung von CEF Python für das Chromium Embedded Framework. CEF ist eine Art Elektron für Python https://github.com/cztomczak/cefpython

1
Ahmed Monir

Sie können python-Shell verwenden, um zwischen Python und Node.js/Electron zu kommunizieren. 

python-Shell bietet eine einfache Möglichkeit, Python-Skripts von Node.js mit einfacher und effizienter Kommunikation zwischen Prozessen und besserer Fehlerbehandlung auszuführen.

Mit Python-Shell können Sie:

  • python-Skripte in einem untergeordneten Prozess erzeugen;
  • zwischen Text-, JSON- und Binärmodus wechseln;
  • verwenden Sie benutzerdefinierte Parser und Formatierer.
  • datentransfers über stdin- und stdout-Streams durchführen;
  • holen Sie sich Stapelspuren, wenn ein Fehler ausgegeben wird.

Vergewissern Sie sich in Ihrem Terminal, dass Sie sich im Stammordner Ihres Projekts befinden, und führen Sie den folgenden Befehl aus, um Python-Shell von npm aus zu installieren:

npm install --save python-Shell 

Sie können dann einfach eine Python-Shell ausführen:

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);
});

Weitere Informationen aus diesem Tutorial

0
Ahmed Bouchefra