我试图用网络技术(HTML5,CSS和JS)编写一个跨平台的桌面应用程序。我看了一些框架,并决定使用电子框架。
我已经用Python编写了这个应用程序,所以我想知道是否可以在电子框架上使用Python编写跨平台桌面应用程序?
发布于 2016-08-23 20:49:28
可以使用电子,但是如果您正在寻找"webbish“UI功能,您可以检查Flexx -它允许您使用纯Python编写代码,但仍然使用web开发工具的样式和UI灵活性。
如果你坚持上电子,你应该遵循这个帖子的想法。
首先,确保安装了所有设备:
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应用程序生成了一个子进程。然后我们检查服务器是否已经启动,是否使用了无限循环(嗯,糟糕的实践!)我们实际上应该检查所需的时间,并在几秒钟后中断循环)。服务器启动后,我们构建了一个实际的电子窗口,指向新的本地网站索引页面。
发布于 2020-01-02 20:44:45
这是对@bluesummers在2020年1月2日为我工作的答案的更新。
pip install Flask
npm install electron
npm install request
npm install request-promisemain.js
const electron = require( "electron" );
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
electron.crashReporter.start( { companyName: "my company", submitURL: "https://mycompany.com" } );
var mainWindow = null;
app.on(
"window-all-closed",
function()
{
// if ( process.platform != "darwin" )
{
app.quit();
}
}
);
app.on(
"ready",
function()
{
var subpy = require( "child_process" ).spawn( "python", [ "./hello.py" ] );
// var subpy = require( "child_process" ).spawn( "./dist/hello.exe" );
var rp = 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()
{
rp( mainAddr )
.then(
function( htmlString )
{
console.log( "server started!" );
OpenWindow();
}
)
.catch(
function( err )
{
console.log( "waiting for the server start..." );
// without tail call optimization this is a potential stack overflow
StartUp();
}
);
};
// fire!
StartUp();
});package.json
{
"name": "your-app",
"version": "0.1.0",
"main": "main.js",
"scripts":
{
"start": "electron ."
},
"dependencies":
{
"electron": "*",
"request": "^2.88.0",
"request-promise": "^4.2.5"
}
}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 a Python backend."
if __name__ == "__main__":
print( "oh hello" )
#time.sleep(5)
app.run( host = "127.0.0.1", port = 5000 ) npm start发布于 2018-12-21 11:19:57
您可以使用Python在Python和Node.js/ use之间进行通信。
Python提供了一种从Node.js运行Python脚本的简单方法,具有基本的、高效的进程间通信和更好的错误处理。
使用,您可以:
在您的终端中,确保您位于项目的根文件夹中,并运行以下命令从npm安装python:
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);
});请参阅此教程的更多信息
https://stackoverflow.com/questions/32158738
复制相似问题