Возможно работать с Electron, но если вы ищите возможности пользовательского интерфейса «webbish», вы можете проверить Flexx - он позволяет вам кодировать чистый Python, но при этом использовать гибкость стилей и пользовательского интерфейса для инструментов веб-разработки.
Если вы настаиваете на том, чтобы идти на 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. Затем мы проверяем, был ли сервер включен или не использовал неограниченный цикл (ну, плохая практика! Мы должны проверить время и разбить цикл через несколько секунд). После того, как сервер закончил работу, мы создаем фактическое электронное окно, указывающее на новую страницу индекса веб-сайта.
Добро пожаловать в stackoverflow. Разве ответ не указан прямо в верхней части электронной страницы? – e4c5
Спасибо. Я этого не видел, но я еще раз проверю. Сожалею. –