Create desktop applications with Flask/FastAPI/Django!
Install
pip install flaskwebgui
Or download source file flaskwebgui.py and place it where you need.
Usage with Flask
Let's say we have the following flask application:
#main.py
from flask import Flask
from flask import render_template
from flaskwebgui import FlaskUI # import FlaskUI
app = Flask(__name__)
ui = FlaskUI(app, width=500, height=500) # add app and parameters
@app.route("/")
def hello():
return render_template('index.html')
@app.route("/home", methods=['GET'])
def home():
return render_template('some_page.html')
if __name__ == "__main__":
# app.run() for debug
ui.run()
Alternatively, next to main.py create a file called gui.py and add the following contents:
#gui.py
from flaskwebgui import FlaskUI
from main import app
FlaskUI(app, width=600, height=500).run()
Next start the application with:
python main.py
#or
python gui.py #in case you created gui.py
Application will start chrome in app mode, flask will be served by waitress.
Usage with Flask-SocketIO
Let's say we have the following SocketIO application:
#main.py
from flask import Flask
from flask_socketio import SocketIO
from flaskwebgui import FlaskUI
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route("/")
def index():
return {"message": "flask_socketio"}
if __name__ == '__main__':
# socketio.run(app) for development
FlaskUI(app, socketio=socketio).run()
Alternatively, next to main.py create a file called gui.py and add the following contents:
#gui.py
from flaskwebgui import FlaskUI
from main import app, socketio
FlaskUI(app, socketio=socketio).run()
Next start the application with:
python main.py
#or
python gui.py #in case you created gui.py
Application will start chrome in app mode, flask will be served by socketio.
Usage with FastAPI
Pretty much the same, bellow you have the main.py file:
from fastapi import FastAPI
from flaskwebgui import FlaskUI # import FlaskUI
app = FastAPI()
ui = FlaskUI(app) # feed app and parameters
@app.get("/")
def read_root():
return {"message": "Works with FastAPI also!"}
if __name__ == "__main__":
ui.run()
Alternatively, next to main.py create a file called gui.py and add the following contents:
#gui.py
from flaskwebgui import FlaskUI
from main import app
FlaskUI(app, width=600, height=500).run()
Next start the application with:
python main.py
#or
python gui.py #in case you created gui.py
Fastapi will be served by uvicorn.
Usage with Django
Next to manage.py file create a gui.py file where you need to import application from project's wsgi.py file.
#gui.py
from flaskwebgui import FlaskUI
from project_name.wsgi import application
FlaskUI(application).run()
Next start the application with:
python gui.py
Django will be served by waitress.
Configurations
Default FlaskUI class parameters:
-
app, ==> app instance
-
width=800 ==> window width default 800
-
height=600 ==> default height 600
-
fullscreen=False ==> start app in fullscreen
-
maximized=False ==> start app in maximized window
-
app_mode=True ==> by default it will start chrome in app(desktop) mode without address bar
-
browser_path="" ==> path to
browser.exe(absolute path to chromeC:/browser_folder/chrome.exe) -
start_server="flask" ==> You can add a function which starts the desired server for your choosed framework (bottle, web2py pyramid etc)
-
port=5000 ==> specify other if needed
-
socketio=SocketIO Instance ==> Flask SocketIO instance (if specified, uses
socketio.run()instead ofapp.run()for Flask application)
Should work on windows/linux/mac with no isssues.
Develop your app as you would normally do, add flaskwebgui at the end or for tests. flaskwebgui doesn't interfere with your way of doing a flask application it just helps converting it into a desktop app more easily with pyinstaller or pyvan.
Distribution
You can distribute it as a standalone desktop app with pyinstaller or pyvan.
Credits
It's a combination of https://github.com/Widdershin/flask-desktop and https://github.com/ChrisKnott/Eel
flaskwebgui just uses threading to start a flask server and the browser in app mode (for chrome). It has some advantages over flask-desktop because it doesn't use PyQt5, so you won't have any issues regarding licensing and over Eel because you don't need to learn any logic other than Flask/Django.
Submit any questions/issues you have! Fell free to fork it and improve it!
Release files for flaskwebgui 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flaskwebgui-0.2.1.tar.gz | 7.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flaskwebgui-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.0 kB
Release files / flaskwebgui-0.2.1.tar.gz
| Download URL | flaskwebgui-0.2.1.tar.gz |
|---|---|
| Size | 7.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
872966c3f124c49829a750a72291f8b0e527019c5f62e7692deee4a09dd2247a
|
|
BLAKE2b-256 checksum How to use checksums |
ddf941f27af24607062569ed2b2b5a7f3d639bf5d95dcc814327428958626009
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.22.0 setuptools/51.3.3 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.5
|
Release files / flaskwebgui-0.2.1-py3-none-any.whl
| Download URL | flaskwebgui-0.2.1-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8acf6c4c4c2e3f9393be9fcd8a77423666ec030ad20edc77cced8944641e4e82
|
|
BLAKE2b-256 checksum How to use checksums |
ec3efa5d44bf558ae21774fef4cecd5fc00dd0c40ed4565540028d563af84481
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.22.0 setuptools/51.3.3 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.5
|