• This repository has been archived on 16/Feb/2020
  • Stars
    star
    440
  • Rank 99,050 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created about 9 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

create desktop application by using Flask and QtWebKit

PyFladesk

Create desktop application by using Flask and QtWebEngine.

Idea

Rather than open Flask app in user browser, create a QWebview and then run Flask app on it.

By default, every internal link is open inside the app and every external link is open in the default browser.

Dependencies

  • Python3
  • Flask
  • PyQt

Note: Some releases require Conda to properly create a virtual environment.

Versions

There are 3 available versions:

Note: Both PyQt4 and PyQt5.6 are only made available for compatibility reasons, there is no intention to keep them updated unless requested.

Installation with pip

If you want to install PyFladesk with pip you just run.

pip install pyfladesk

Only the latest version (PyQt5.10) is uploaded to PyPI. If you want to use a legacy version check the instructions in the corresponding branch readme. Each version is maintained in a different form due to versions issues so you should check the readme of the branch of the version you want to use.

No pip installation

In case you don't want to use pip or you want to use a freezed version of PyFladesk, just download the __init__.py file from the pyfladesk folder and place it in your project (change the name to pyfladesk.py), then you can follow the instructions below.

Usage

You just need to change two lines:

Add an import at the top:

from pyfladesk import init_gui

And wherever you run the app (app.run) replace it with:

init_gui(app)

Then run your app as usual

Example

from flask import Flask
from pyfladesk import init_gui

app = Flask(__name__)

from routes import *

if __name__ == '__main__':
    init_gui(app)

Parameters

The init_gui function has some optional parameters that you may find useful:

init_gui(application, port=5000, width=300, height=400,
             window_title="PyFladesk", icon="appicon.png", argv=None)
  • port: choose in which port the application will run.
  • width: The initial width of the main window.
  • height: The initial height of the main window.
  • window_title: The main window title.
  • icon: the path to the icon file of the main window.
  • argv: additional parameters to the QApplication instance.

Packaging

For a full guide on how to package the app in one executable with PyInstaller file check this blog post

This avoids the need for the Python interpreter and the packages you use inside your project.

If you haven't already, install it with pip (if you use virtual environments you should install it inside it).

pip install pyinstaller

Some parameters to consider:

  • F - Bundles everything in a single file
  • w - Avoid displaying a console
  • --add-data - Add Folders to the directory/executable

Since Flask relies on a directory structure you should pass it to the folder, in the example case we only have two folders: templates and static, in case you use a database or some other directory structure you should adapt this.

Note: For more complex scenarios check the PyInstaller Docs

If we want everything in one executable file we can

Windows:

pyinstaller -w -F --add-data "templates;templates" --add-data "static;static" app.py

Linux:

pyinstaller -w -F --add-data "templates:templates" --add-data "static:static" app.py

Depending on the Linux version, you might need to install sudo apt install libpython3.x-dev

This will create a folder dist with our executable ready to be shipped. The executable will open the main window of our app.

If you still see TemplateNotFound, you may try the following (From issue #9):

Define this in a helper script:

def resource_path(relative_path):
 """ Get absolute path to resource, works for dev and for PyInstaller """
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

Include this at the top, under imports

if getattr(sys, 'frozen', False):
    template_folder = resource_path('templates')
    static_folder = resource_path('static')
    app = Flask(__name__, template_folder=template_folder, static_folder=static_folder)
else:
    app = Flask(__name__)

Also from issue #9, in Windows 10 you may need to run this script:

pyinstaller -w -F --add-data "templates;templates" --add-data "static;static" app.py --path 'C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64'

Since Qt is quite big, your executables will be big too. The example app of this repository is 70 MB (69 MB of which are the Qt Component for displaying HTML). This is reasonable taking into account that we are shipping a self contain web browser. In case size is crucial, you can follow this suggestions

Sample apps

List of apps made by PyFladesk

Contributing Oportunities

Feel free to open issues and pull requests for new features and improvements. This is a guide for things that may be useful for the project:

  • Add different backends (wxPython, TKinter, etc)
  • Test performance of HTML5 and CSS3
  • Add Directory structure for large projects (Flask Patterns)
  • Test other micro web frameworks (Bottle, etc)
  • Make sample apps

Thanks

Thanks to Mathias Ettinger for his reviews, one for the old code and one for the new one

More Repositories

1

rust-youtube-downloader

Youtube video downloader written in Rust
Rust
158
star
2

python-tips

List of python tips
122
star
3

PyFladesk-rss-reader

simple rss reader by PyFladesk
HTML
61
star
4

url-to-qrcode-firefox-addon

an add-on to convert current url to qr code !!
JavaScript
61
star
5

tg-bot-youtube-downloader

a telegram bot for download youtube videos.
PHP
48
star
6

chatgpt-toolbox

TypeScript
41
star
7

search-in-libgen

web extension to open search in LibGen from GoodReads
JavaScript
24
star
8

php-telegram-bot

a wrapper class for telegram bot api
PHP
22
star
9

php-telegram-cli

php wrapper for telegram cli
PHP
17
star
10

nodejs-online-users

Show online users on the map
JavaScript
14
star
11

english-learners-dictionary

English Learner's Dictionary Extension
JavaScript
13
star
12

youtube-video-info

Get the information such as caption, title, size, formats, etc. about a Youtube video
PHP
10
star
13

add-to-feedly

a firefox extension to add a website to feedly ;)
JavaScript
9
star
14

Artemis-Framework

MVC php Framework
PHP
8
star
15

aria2-qt-gui

a simple aria2 gui with Qt
C++
6
star
16

rtree

Directory tree structure written in Rust
Rust
6
star
17

php-youtube-downloader

Command line application for downloading Youtube videos
PHP
6
star
18

go-game-of-life

Conway's Game of life in Golang
Go
5
star
19

background-image-ckeditor-plugin

Plugin for set background image in CKEditor
JavaScript
5
star
20

pyqt-md-reader

simple PyQt app to read markdown format
Python
4
star
21

gouter

yet another go router
Go
3
star
22

Artemis-Framework2

Artemis Framework Version 2
PHP
3
star
23

php-whois

a class for get domain information
PHP
3
star
24

telegram-whois-bot

Telegram whois bot
PHP
2
star
25

hn-react-native

JavaScript
2
star
26

axel-downloader-for-firefox

a simple axel downloader extention for firefox
JavaScript
2
star
27

php-lambda-template

PHP
2
star
28

oxford-dictionary-scrapper

Python
2
star
29

dlr

(Not Yet) full feature CLI downloader written in Rust
Rust
2
star
30

blog

2
star
31

m3u-file-collector

collect all files in a m3u (playlist) file into a folder
Python
2
star
32

lbgndl

JavaScript
2
star
33

hn-classifier

Classification Hacker News posts
Python
1
star
34

dbman

Go
1
star
35

telegram-spotify-downloader

1
star
36

Loremipsum

ساخت متن لورم ایپسوم به زبان فارسی و انگلیسی با زبان برنامه نویسی php
PHP
1
star
37

UrlShortener

UrlShortener written in PHP
PHP
1
star
38

my-notes

1
star
39

keyboardsmash.github.io

My personal blog https://keyboardsmash.dev
HTML
1
star
40

go-filemanager

Go
1
star
41

PHProMVC

آموزش معماری سه لایه در PHP
PHP
1
star
42

laravel-nginx-installer

install laravel with nginx virtual host
Shell
1
star
43

wp-custom-register

create custom form for register , login and forgot password
PHP
1
star
44

api-platform-tmp

JavaScript
1
star
45

html5-games

simple html5 games
HTML
1
star
46

symfony-oxford-dictionary

PHP
1
star