A cool Python desktop application built with Pyrustic
Project description
The Pyrustic software suite with the cyberpunk theme
Pyrustic
Pyrustic
is a lightweight framework and software suite to help develop, package, and publish Python
desktop applications
.
This is an emailware. You are encouraged to send a feedback.
Demo | Features | Installation | Tutorial
Table Of Contents
- Overview
- Hubstore
- Demo
- Philosophy
- Features
- Requirements
- Installation
- Tutorial
- Documentation
- License
- Contact
Overview
Since Python
comes with battery included, Pyrustic
makes extensive use of Tkinter
as GUI Toolkit and SQLite
as database engine. The Wheel standard built-package format is used to build distribution packages.
Pyrustic
is both a software suite and a framework on which the software suite is based.
You can use both the framework and the software suite or only one of the components. The framework and the software suite are useful for a new project as well as for an existing project. Example, you could decide to only use the Table
widget from the package pyrustic.widget
in your existing Tkinter
codebase. Another example is to only use Pyrustic
to build a Wheel
then publish it to your Github
!
The Framework
The Framework
is easy to use and flexible with only three constraints:
- you have to follow the conventional Python project structure as described in the Python Packaging User Guide;
- you need to have a
__main__.py
file in the source package; - the project name should be the same as the source package.
In fact, these aren't constraints but simply elegance
and proactivity. It will save you a lot of trouble in the future (believe me). By the way, the command-line tool Manager
(see next section) will take care of these details for you, you will just need to link a project directory, then issue the command init
.
The Framework
contains libraries that target:
- GUI;
- multithreading;
- fetching resources;
- database connection;
- and more...
Example of code - A simple Hello Friend demo - main.py
Note: this is generated by Pyrustic
when you issue the command init
.
Click to expand (or collapse)
# "__main__.py" generated by Pyrustic Manager
from pyrustic.app import App
from pyrustic.theme.cyberpunk import Cyberpunk
from demo.view.main_view import MainView
def main():
# The App
app = App(__package__)
# Set theme
app.theme = Cyberpunk()
# Set view
app.view = MainView(app)
# Center the window
app.center()
# Lift off !
app.start()
if __name__ == "__main__":
main()
Example of code - A simple Hello Friend demo - view/main_view.py
Note: this is generated by Pyrustic
when you issue the command init
.
Click to expand (or collapse)
# a "view" module generated by Pyrustic Manager
import tkinter as tk
from pyrustic.viewable import Viewable
from pyrustic.widget.toast import Toast
class MainView(Viewable):
def __init__(self, app):
self._app = app
self._root = app.root
self._body = None
self._btn_max = None
# -- View's Lifecycle --
def _on_build(self): # it's mandatory to override this method
self._body = tk.Frame(self._root)
self._root.geometry("500x300")
# Label
label = tk.Label(self._body, text="Hello Friend !")
label.pack(expand=1, fill=tk.BOTH)
# Footer
footer = tk.Frame(self._body)
footer.pack(side=tk.BOTTOM, fill=tk.X)
# Button Leave
btn_leave = tk.Button(footer, text="Leave",
command=self._on_click_btn_leave)
btn_leave.pack(side=tk.RIGHT, padx=2, pady=2)
# Button Maximize
self._btn_max = tk.Button(footer, text="Maximize",
command=self._on_click_btn_max)
self._btn_max.pack(side=tk.RIGHT, pady=2)
def _on_display(self): # optional - code executed when the view is displayed
pass
def _on_destroy(self): # optional - code executed as the view is destroyed
pass
# -- Private --
def _on_click_btn_max(self):
self._app.maximize()
self._btn_max.destroy()
def _on_click_btn_leave(self):
toast = Toast(self._body, message="Goodbye Friend !")
toast.build_wait() # next line will be executed after toast is destroyed
self._app.exit()
The software suite
The lightweight software suite is made of:
Manager
: an optional command-line application to rule them all;Rustiql
: a graphicalSQL Editor
;Jupitest
: a graphicalTest Runner
;- and
Hubway
: an application to publish your project.
All these components come with Pyrustic
from the first installation, so you don't have to think about how to get them. They are the batteries included
in Pyrustic
.
The Manager
Manager
The Manager
is the entry point to the software suite. An optional command-line application with an API that you can use programmatically to automate your workflow.
Via the Manager
you can:
- create a project with battery included (project structure, pyproject.toml, etc);
- easily add
packages
,modules
orfiles
to your project; - run a specific
module
of your project; - view recent projects list and quickly switch between projects;
- launch the
SQL Editor
,Test Runner
andHubway
; - build a distribution package according to setup.cfg and MANIFEST.in;
- and more...
The build
command builds a package that could be published with the application Hubway
.
Rustiql - The SQL Editor
SQL Editor
The graphical SQL Editor
allows you to:
- visualize your databases content;
- edit your database (CRUD);
- import SQL scripts;
- open in-memory database;
- and more...
The SQL Editor
makes extensive use of the pyrustic.dao
library.
Jupitest - The Test Runner
Test Runner
The Test Runner
reproduces the tree structure of the tests
folder in your project. The Test Runner
allows you to:
- run test
packages
; - run test
modules
; - run test
classes
; - and even run test
methods
; - and more...
The Test Runner
makes extensive use of the pyrustic.threadom
library to perform smooth real-time test reporting.
Hubway
Hubway
Hubway
is an application that allows you to publish a new release of your application on Github
. Once published, you can track your project, see metrics like the number of stargazers
, subscribers
or releases downloads
.
Hubway
makes extensive use of pyrustic.gurl
to fetch resources.
You need a personal access token to publish a release via Hubway
or to increase the API rate limit.
It is easy to generate a personal access token. Read this article.
Hubstore
Once you are ready to release a new version of your app, Pyrustic
allows you to build a distribution package with the build
command and then publish it to Github with Hubway
.
Then the question that arises is "How to make the find-download-install-run
process easier for users?". This is where the Hubstore
comes in.
With Hubstore
, it's easy to showcase, distribute, install, and manage your Python desktop apps.
Hubstore
is available on PyPI and yes it's also built with Pyrustic
!
Do you want to learn more about Hubstore
? Click on this link.
Demo
This is the now obsolete demo video. I will upload an up-to-date video later.
To open the page in a new tab, you can just do a CTRL+click (on Windows and Linux) or CMD+click (on MacOS) on the link.
Philosophy
Wisdom from Antiquity
By Jean-Léon Gérôme - Walters Art Museum: Home page Info about artwork, Public Domain, Link
He owned a cup which served also as a bowl for food but threw it away when he saw a boy drinking water from his hands and realized one did not even need a cup to sustain oneself.
--Mark, J. J. (2014, August 02). Diogenes of Sinope. Ancient History Encyclopedia. Retrieved from https://www.ancient.eu/Diogenes_of_Sinope/
Advertisement from the twentieth century
By Cecile & Presbrey advertising agency for International Business Machines. - Scanned from the December 1951 issue of Fortune by User:Swtpc6800 Michael Holley. The image was touched up with Adobe Photo Elements., Public Domain, Link
Features
A non-exhaustive list of features:
Manager
: optional command-line application to help you to manage your project, build package, launch theTest Runner
, launch theSQL Editor
andHubway
.Test Runner
: a graphicalTest Runner
to run testpackages
,modules
,classes
andmethods
.SQL Editor
: a graphicalSQL Editor
to edit your database, openin-memory
database, load scripts.Hubway
: publish your app, track it and see the metrics like the number ofstargazers
,subscribers
ordownloads
.- An optional
Framework
to use in your project. The sameFramework
used byPyrustic
. pyrustic.threadom
: alibrary
included in theFramework
to make it easy to develop multithreading applications. You can retrieve from the main thread the values returned by the functions executed in other threads and also the exceptions raised by these functions.pyrustic.dao
: alibrary
included in theFramework
to simplify the connection to your database.pyrustic.gurl
: alibrary
included in theFramework
to fetch resources with an implementation of conditional request and a smart responses caching system.Hubway
uses this library to fetch resources as a good API citizen.pyrustic.default_style
andpyrustic.theme
: a style/theme system to make it easy for you to build beautiful GUIs.pyrustic.theme.cyberpunk
: a dark theme ready to use, the one used as base theme by theSQL Editor
,Test Runner
andHubway
.pyrustic.viewable.Viewable
: bring an intuitive lifecycle system to yourViews
by making them implementViewable
. The mega-widgets in this framework implementViewable
.- the
Framework
comes with many awesome widgets (mega-widgets to be precise):Table
,Scrollbox
,Toast
,Tree
and more. pyrustic.jasonix
: alibrary
included in theFramework
which makes it so cool to work withJSON
files.Pyrustic
uses extensively thislibrary
to store user preferences, configuration data and more. With thislibrary
, you can initialize preferences/configuration/whatever files easily, thanks to the internal mechanism ofJasonix
that creates a fresh copy of the given defaultJSON
file at the target path.Jasonix
also comes with a lock to openJSON
files in readonly mode.- for obvious reasons (clue:
beta
),Pyrustic
does not take the risk of deleting the files it needs to get rid of, instead it moves them to atrash
folder. - and more...
Requirements
Pyrustic
is a cross platform
software suite. It should work on your computer (or nope, haha, versions under 1.0.0
will be considered Beta
at best). It is built on Ubuntu with Python 3.5
. Pyrustic
comes with absolutely no warranty. So... à la guerre comme à la guerre.
As Pyrustic
is built with Python
for Python developers
and also makes extensive use of Tkinter
, you may need to learn Python and Tkinter.
Installation
Pyrustic
is available on PyPI (the Python Package Index) to simplify the life of Python developers.
If you have never installed a package from PyPI, you must install the pip tool enabling you to download and install a PyPI package. There are several methods which are described on this page.
$ pip install pyrustic
$ pyrustic
Welcome to Pyrustic Manager !
Version: 0.0.9
Type "help" or "?" to list commands. Type "exit" to leave.
(pyrustic)
Tutorial
- Create a
demo
folder to contain the project you want to start. This folder will be thePROJECT_DIR
of your project. - Run
pyrustic
in your shell to open theManager
. - Link your project to the
Manager
by typing the commandlink
in theManager
. A dialog will appear so you could choose your demo project folder. You can also put the absolute path of the folder directly in front of thelink
command. Thelink
command does not make any change in your project. - Your project is now linked to the
Manager
and becomes the Target project. Thetarget
command displays the path to the Target project (itsPROJECT_DIR
). You can unlink it with the commandunlink
. Whenever you come back to theManager
, just typerelink
to link again your previous Target project. Use the commandlast
to see the list of last projects. - Type
init
in theManager
to perform a project Kickstart. Theinit
command modifies your project. This command will create the minimal project structure with a source packageAPP_PKG
. You will write your code inAPP_PKG
and setup.py/setup.cfg/pyproject.toml will stay inPROJECT_DIR
. - You can run your project with the
run
command without arguments. You can also run a specificmodule
in your project. Example:run host.calc.addition
. - Type
sql
,test
orhub
commands in theManager
to launch theSQL Editor
,Test Runner
orHubway
respectively. - Your project has an entry point which is
__main__.py
. In the__main__.py
file, there is an instance ofpyrustic.app.App
to which the firstView
to display is passed. - A
View
is a class that implementspyrustic.viewable.Viewable
. In aView
you must implement theon_build()
method in which you assign aTk
object (tk.Frame
ortk.Toplevel
) to the_body
instance variable. - The
life cycle
of aView
that implementspyrustic.viewable.Viewable
is:- the call of the method
__init__()
at theView
class instantiation; - then the call of the method
on_build()
; - then the call of the method
on_display()
when theView
is visible; - and the call of the method
on_destroy()
when theView
is destroyed.
- the call of the method
- To run a
View
, call thebuild()
method which will executeon_build()
and will return the content of the_body
instance variable. Thebuild_pack()
method builds theView
then calls the methodpack()
on thebody
in a single call. Same stuff withbuild_grid()
andbuild_place()
. The methodbuild_wait()
is used forView
built with aToplevel
as_body
, thus, execution of the next instructions is paused until the destruction of theView
. To destroy aView
, call the methoddestroy()
. - About application publishing, read this.
Note: Initializing your project with the init
command in the Manager
will create the pyrustic_data
folder in the APP_PKG
. Take a look at this folder if you want to change your GUI default settings.
A better tutorial will come later. Use the init
command in the Manager
to get an equivalent of a graphical Hello World
demo project, then explore the contents of your project. Start with $APP_PKG.__main__
, then $APP_PKG.view.main_view
. Good luck !
Documentation
The versions of Pyrustic
under 1.0.0
are aimed at an audience of early adopters. The documentation is precarious but public classes and methods have minimal documentation in the source code. You can also check the command help
in the Manager
.
Introduction to Python
- python-guide.
- freeCodeCamp on Youtube.
Introduction to Tkinter
Introduction to SQLite
- sqlitetutorial.
- freeCodeCamp on Youtube.
Note: I am not affiliated with any of these entities. A simple web search brings them up.
License
Pyrustic
is licensed under the terms of the permissive free software license MIT License
.
Contact
Hi ! I'm Alex, operating by "Crocker's Rules"
Congratz ! You found the Easter Memeggs ! Enjoy (or cry) !
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.