5

Я пытаюсь написать кросс-платформенное настольное приложение с использованием веб-технологий (HTML5, CSS и JS). Я взглянул на некоторые рамки и решил использовать инфраструктуру Electron.Python on Electron framework

Я уже сделал приложение на Python, поэтому я хочу знать, возможно ли писать кросс-платформенные настольные приложения с использованием Python на основе Electron?

Спасибо

+0

Добро пожаловать в stackoverflow. Разве ответ не указан прямо в верхней части электронной страницы? – e4c5

+0

Спасибо. Я этого не видел, но я еще раз проверю. Сожалею. –

ответ

13

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

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/13437869) – Mayur

+0

@Mayur благодарит за отзыв - я отредактировал его – bluesummers

18

Вы можете использовать nodejs модули внутри Electron. Выезд https://github.com/JeanSebTr/node-python. У меня нет личного опыта, но это может быть то, что вы ищете.

+0

Вы могли бы опубликовать это в комментарии. – Sujay

+0

Приносим извинения ... новичок в stackoverflow :( – Jeffrey

+0

@jeffrey ... это нормально. +1 для вашего первого ответа. Вы можете посмотреть http://stackoverflow.com/tour – Sujay