Ответ 1
Можно работать с Electron, но если вы ищете возможности пользовательского интерфейса "webbish", вы можете проверить Flexx - это позволяет вы должны кодировать чистый Python, но при этом использовать гибкость стилей и 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. Затем мы проверяем, был ли сервер включен или не использовал неограниченный цикл (ну, плохая практика! Мы должны проверить время и разбить цикл через несколько секунд). После того, как сервер был вставлен, мы создаем фактическое электронное окно, указывающее на новую страницу индекса веб-сайта.