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!
Metadata
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 | Provenance | |
|---|---|---|---|---|
| flaskwebgui-0.2.1.tar.gz | 7.8 kB | Without provenance | 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
|
Security for flaskwebgui 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.