Skip to main content

Turn type-hinted Python program into a GUI application with few additional lines of code

Project description

gooey-quick

Turn type-hinted Python program into a GUI application with few additional lines of code

gooey-quick title card

Table of contents


Quick Start

Installation

You can install gooey-quick via pip:

pip install gooey-quick

or by cloning the repository directly:

git clone https://github.com/jacadzaca/gooey_quick.git && ./setup.py

Usage

You can integrate gooey-quick with your code as easily as so:

import gooey_quick


def some_function_you_want_to_gooeyfiy(
    name: str,
    repeat_count: int,
):
    for _ in range(repeat_count):
        print(f'Hello {name}')


if __name__ == '__main__':
    gooey_quick.run_gooey(some_function_you_want_to_gooeyfiy)

Gooey global configuration

You can set Gooey's global options by setting them in the call to gooey_quick.run_gooey like so:

import gooey_quick


def some_function_you_want_to_gooeyfiy(
    name: str,
    repeat_count: int,
):
    for _ in range(repeat_count):
        print(f'Hello {name}')


if __name__ == '__main__':
    gooey_quick.run_gooey(
        some_function_you_want_to_gooeyfiy,
        program_name='Simple demo program',
        program_description='A demo program using Gooey and gooey_quick',
    )

What is it?

gooey-quick is a library that generates a Gooey-based GUIs from methods' signatures.

Why is it?

A lot of GUI programs that are written in an office setting are wrappers around simple python code. Handcrafting GUIs can be cumbersome, while dealing with argparse-like interface becomes more annoying as the program grows (e.g. you have 6 tabs in your Advanced layout Gooey program). With gooey-quick you should forget about the above and focus on the programs' features.

How does it work?

gooey-quick uses python's built-in typing and introspection functionalities to analyze objects' signatures and generate a fancy GUI using the amazing Gooey by chriskiehl.

Examples

Simple 'Flat layout' application

#!/usr/bin/env python3
from enum import Enum
from pathlib import Path
from datetime import date, time

import gooey_quick


class UploadMethod(Enum):
    SFTP = 'SFTP'
    HTTP = 'HTTP'


def upload_file(
    file: Path,
    new_filename: str,
    chunksize: int,
    lattency: float,
    upload_date: date,
    upload_time: time,
    upload_method: UploadMethod,
):
    assert type(upload_method) is UploadMethod
    return (
        f'{file} was uploaded via {upload_method.name} on {upload_date} at '
        f'{upload_time} in chunks of size {chunksize} and with lattency of '
        f'{lattency}'
    )


if __name__ == '__main__':
    # gooey_quick.run_gooey has the same return values as the wrapped function
    return_value = gooey_quick.run_gooey(
        # the first argument is the fucntion you'd like to be converted into a Gooey program
        upload_file,
        # gooey_quick.run_gooey can be used to set Gooey's global configuration
        # see https://github.com/chriskiehl/Gooey#global-configuration for possible options
        program_name='Simple upload program',
        program_description='A demo program using Gooey and gooey_quick',
    )
    print(return_value)

Start Gooey in Advanced mode with 3 different tabs:

#!/usr/bin/env python3
from pathlib import Path
from typing import Optional
from datetime import date, datetime

import gooey_quick


def search_history(
    history_file: Path,
    wanted_phrase: str,
    min_occure_date: Optional[date] = None,
    max_occure_date: Optional[date] = None,
) -> Optional[tuple[date, str]]:
    occurance_date = date(year=2002, month=7, day=22)
    the_phrase = "wow you have discovered my secret phrase!"
    occurance_in_range = True

    if min_occure_date is not None and max_occure_date is not None:
        print(f'Looking for {wanted_phrase} from {min_occure_date} to {max_occure_date}...')
        occurance_in_range = occurance_date in range(min_occure_date, max_occure_date)

    if wanted_phrase in the_phrase and occurance_in_range:
        return f'{occurance_date}: {the_phrase}'


def append_to_history(
    history_file: Path,
    phrase: str,
    occurance_date: date = datetime.now().date()
):
    return f'Appending {phrase} to {history_file} at {occurance_date}...'


def remove_from_history(
    history_file: Path,
    phrase: str,
):
    return f'Removing {phrase} from {history_file}...'


if __name__ == '__main__':
    # when passing a dict to gooey_quick.run_gooey, the keys become
    # the tabs descriptions, while the values are the function to
    # create the gui from
    return_value = gooey_quick.run_gooey(
        {
           'Add phrase': append_to_history,
           'Remove phrase': remove_from_history,
           'Search phrases': search_history,
        },
        # set Gooey's global config as per: https://github.com/chriskiehl/Gooey#layout-customization
        navigation='TABBED',
        program_name='Gooey subparser layout from function dict',
        program_description='Presents how to create a bundeled configuration with gooey_quick',
     )
    print(return_value)

For more see the docs/examples/ directory.

Packaging

Please refer to either the official guide or this tutorial

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gooey-quick-1.0.1.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

gooey_quick-1.0.1-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file gooey-quick-1.0.1.tar.gz.

File metadata

  • Download URL: gooey-quick-1.0.1.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for gooey-quick-1.0.1.tar.gz
Algorithm Hash digest
SHA256 dd4fc9e344c2f3210498d5b0ecf90d734309c83d002c866cda5bdf18820cdb7a
MD5 7f27b3e8db86603e64e25974732782f1
BLAKE2b-256 64c5eb1f976d46c25b3327aa363646a559d8ca61530fcbcda8fb92798a109b82

See more details on using hashes here.

File details

Details for the file gooey_quick-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: gooey_quick-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for gooey_quick-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fdcee4c14109490df7abc85ff275490140f5bd8bb64916245fdefe88288428e9
MD5 5f053bc444a1d2d54ef21281c0c9684a
BLAKE2b-256 689f32791b7cece6507b1cfb03155760bdc423642dd4a2b62d7e3057571ed8cd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page