开发者社区> 问答> 正文

Python on Electron框架

我正在尝试使用Web技术(HTML5,CSS和JS)编写跨平台的桌面应用程序。我看了一些框架,并决定使用Electron框架。

我已经用Python完成了该应用程序,所以我想知道是否有可能在Electron框架上使用Python编写跨平台的桌面应用程序?

展开
收起
祖安文状元 2020-02-21 14:30:40 568 0
1 条回答
写回答
取消 提交回答
  • 可以与Electron一起使用,但是如果您正在寻找“ 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();
    });
    
    

    摘自帖子本身-以下注意事项

    2020-02-21 14:31:05
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载