首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于电子框架的Python

关于电子框架的Python
EN

Stack Overflow用户
提问于 2015-08-22 17:12:30
回答 4查看 87.5K关注 0票数 58

我试图用网络技术(HTML5,CSS和JS)编写一个跨平台的桌面应用程序。我看了一些框架,并决定使用电子框架。

我已经用Python编写了这个应用程序,所以我想知道是否可以在电子框架上使用Python编写跨平台桌面应用程序?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-23 20:49:28

可以使用电子,但是如果您正在寻找"webbish“UI功能,您可以检查Flexx -它允许您使用纯Python编写代码,但仍然使用web开发工具的样式和UI灵活性。

如果你坚持上电子,你应该遵循这个帖子的想法。

首先,确保安装了所有设备:

代码语言:javascript
复制
pip install Flask
npm install electron-prebuilt -
npm install request-promise -g

现在,创建您希望发生所有魔术的目录,并包括以下文件

创建您的hello.py

代码语言:javascript
复制
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

代码语言:javascript
复制
{
  "name"    : "your-app",
  "version" : "0.1.0",
  "main"    : "main.js",
  "dependencies": {
    "request-promise": "*",
    "electron-prebuilt": "*"
  }
}

最后创建您的main.js

代码语言:javascript
复制
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应用程序生成了一个子进程。然后我们检查服务器是否已经启动,是否使用了无限循环(嗯,糟糕的实践!)我们实际上应该检查所需的时间,并在几秒钟后中断循环)。服务器启动后,我们构建了一个实际的电子窗口,指向新的本地网站索引页面。

票数 51
EN

Stack Overflow用户

发布于 2020-01-02 20:44:45

这是对@bluesummers在2020年1月2日为我工作的答案的更新。

  1. 安装Node (https://nodejs.org/en/download/)和python 3。
  2. 安装依赖关系:
代码语言:javascript
复制
    pip install Flask
    npm install electron
    npm install request
    npm install request-promise
  1. 为项目创建一个目录,并在该目录中创建以下文件:

main.js

代码语言:javascript
复制
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

代码语言:javascript
复制
{
    "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

代码语言:javascript
复制
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 )
  1. 在项目目录中,运行:
代码语言:javascript
复制
    npm start
票数 9
EN

Stack Overflow用户

发布于 2018-12-21 11:19:57

您可以使用Python在Python和Node.js/ use之间进行通信。

Python提供了一种从Node.js运行Python脚本的简单方法,具有基本的、高效的进程间通信和更好的错误处理。

使用,您可以:

  • 在子进程中生成Python脚本;
  • 在文本、JSON和二进制模式之间切换;
  • 使用自定义解析器和格式化器;
  • 通过stdin和stdout流执行数据传输;
  • 当抛出错误时获取堆栈跟踪。

在您的终端中,确保您位于项目的根文件夹中,并运行以下命令从npm安装python:

代码语言:javascript
复制
npm install --save python-shell 

然后,您可以使用以下方法运行Python shell:

代码语言:javascript
复制
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);
});

请参阅此教程的更多信息

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32158738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档