web-dev-qa-db-ja.com

Python Electronフレームワークで

Webテクノロジー(HTML5、CSS、JS)を使用してクロスプラットフォームのデスクトップアプリを作成しようとしています。いくつかのフレームワークを見て、Electronフレームワークを使用することにしました。

私はすでにPythonでアプリを作成しているので、ElectronフレームワークでPython?

ありがとうございました

18
A Junior

Electronで作業することは可能ですが、「webbish」UI機能を探している場合は、 Flexx をチェックできます。これにより、純粋なPython Web開発ツールのスタイリングとUIの柔軟性を使用します。

Electronを使用することを主張する場合は、このアイデアに従う必要があります post

まず、すべてがインストールされていることを確認してください。

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

ここで、すべての魔法を発生させたいディレクトリを作成し、次のファイルを含めます

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 __name__ == "__main__":
   print('oh hello')
    #time.sleep(5)
    app.run(Host='127.0.0.1', port=5000)

基本的なpackage.json

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

最後に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();
});

投稿自体から取られた-次のメモがあります

Main.jsで、Pythonアプリケーションの子プロセスを生成します。次に、サーバーが無制限のループを使用しているかどうかを確認します(よくありません!実際に確認する必要があります!時間がかかり、数秒後にループが切断されます)サーバーが起動したら、新しいローカルWebサイトのインデックスページを指す実際の電子ウィンドウを作成します。

28
bluesummers

Electron内でnodejsモジュールを使用できます。 https://github.com/JeanSebTr/node-python をご覧ください。個人的な経験はありませんが、あなたが探しているものかもしれません。

27
Jeffrey

pythonを使用して電子の代替を探していました。CEFPythonそのPython Chromium Embedded Frameworkのバインディング。 CEFはPython https://github.com/cztomczak/cefpython の一種の電子です

3
Ahmed Monir

Python-Shellを使用して、PythonとNode.js/Electronの間で通信できます。

python-Shellは、基本的かつ効率的なプロセス間通信と優れたエラー処理により、Node.jsからPythonスクリプトを実行する簡単な方法を提供します。

Python-Shellを使用すると、次のことができます。

  • spawn Python子プロセスのスクリプト;
  • テキストモード、JSONモード、バイナリモードを切り替えます。
  • カスタムパーサーとフォーマッターを使用します。
  • stdinおよびstdoutストリームを介してデータ転送を実行します。
  • エラーがスローされたときにスタックトレースを取得します。

ターミナルで、プロジェクトのルートフォルダー内にいることを確認し、次のコマンドを実行してnpmからpython-Shellをインストールします。

npm install --save python-Shell 

次に、次を使用してPython Shellを実行します。

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

詳細はこちらをご覧ください tutorial

2
Ahmed Bouchefra