Skip to main content

Builds dialogs from ASCII art definition.

Project description

A library that:

  • creates GUI from ASCII-art (with well-defined syntax)

  • maps widgets to virtual class attributes

  • relieves you from the boring parts of Form building while leaving you in control.

Did you ever design a form by scribbling something like this in your editor:

Text to transform:   [ Text_      ]

Select transformation:

(x) Uppercase
( ) Lowercase
( ) Title-case

    [ OK ]            [ Cancel ]

… and wished that you could be done with design and start coding? Wish no longer:

from ascii_designer import AutoFrame

class TextTransformer(AutoFrame):
    f_body='''
                            |    <->       |
        Text to transform:   [ Text_      ]

        Select transformation:

        (x) Uppercase
        ( ) Lowercase
        ( ) Title-case

            [ OK ]            [ Cancel ]~

    '''
    def ok(self):
        text = self.text
        if self.uppercase:
            text = text.upper()
        elif self.lowercase:
            text = text.lower()
        elif self.titlecase:
            text = text.title()
        print(text)
        self.close()

    def cancel(self):
        self.close()

if __name__ == '__main__':
    TextTransformer().f_show()

Some comments, incidentally highlighting the features of this library:

  • As you probably guessed, all the magic happens in AutoFrame. The f_show call triggers rendering of the form. All the reserved attributes are prepended with f_ to get out of your way when subclassing.

  • There is a well-defined syntax for how to get the usual widget types. In the example you can find labels (plain text), a text box, radio buttons and normal buttons.

  • The columns are defined by the header row with the pipe characters. The minus sign denotes stretching columns. (The < / > chars are just decoration.)

  • Column-span is easily done by having not-a-space underneath the pipe symbol. Row-span can also be done by prepending subsequent cells with a { character.

  • Anchoring is controlled by whether the cell is space-padded or not. For example, the Text box stretches, while the cancel button is centered. The tilde character can be used instead of a fragile trailing space.

  • Widget IDs are automatically generated by lowercasing and whitelisting the captions.

  • If a method exists with the same name as a widget id, it is automatically bound to the usually-wanted event (click in case of button, value-changed in case of basically anything else). Oh, and close and quit are already there for your convenience.

  • Otherwise, you can retrieve and set the widget’s value by using its id like a class attribute.

  • f_show() captures all the usual boilerplate and simply f***ing shows the frame. It can be used for both the toplevel and additional frames.

  • Also note how the class name automatically turned into the window title. Override by setting .f_title.

  • The created widgets are “raw”, native widgets. You can configure the toolkit to use. Currently there is a Qt and a Tkinter implementation. The native widget can accessed using form["widget_id"] (or form.f_controls["widget_id"]).

The general philosophy is to not paint everything over with wrappers. Instead, the library focuses on specific tasks - building the layout, event-/value binding - and lets you do everything else with the API you know and (maybe) love.

INSTALLATION

pip install ascii_designer

Requirements: Python >= 3.10, attrs. To use the Qt toolkit you need qtpy.

DOCUMENTATION

Please proceed to https://ascii-designer.readthedocs.io/

For some examples, look at test_ascii_designer.py as well as the examples folder.

LICENSE

MIT License: https://github.com/loehnertj/ascii_designer/blob/master/LICENSE

TODO

Beta-state software, somewhat battle-tested.

This is a hobby project. If you need something quick, open an issue or send a pull request.

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

ascii_designer-2.1.0.tar.gz (114.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ascii_designer-2.1.0-py3-none-any.whl (52.8 kB view details)

Uploaded Python 3

File details

Details for the file ascii_designer-2.1.0.tar.gz.

File metadata

  • Download URL: ascii_designer-2.1.0.tar.gz
  • Upload date:
  • Size: 114.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ascii_designer-2.1.0.tar.gz
Algorithm Hash digest
SHA256 dc0788f441435a5272d5d4636b5f20a9a90667ecd04144baefa4cd677ccc42e9
MD5 6d6ba29b6cddd340eb8ba17c52a84cfc
BLAKE2b-256 eecaade2cb3fdd317d2edf11a27240e090135f951c6764a259fe964c0313594d

See more details on using hashes here.

File details

Details for the file ascii_designer-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: ascii_designer-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 52.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ascii_designer-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 06d95b91c89f95c5fb8a4dec74664606fba9f19533223762c850ade4a4255280
MD5 856dad1b345a98cf9a5bb598098d1c49
BLAKE2b-256 baacaecf1f7d5b3a2b71441d1edbaa75b9893d19bc4cdc93d01c8423f9eb2044

See more details on using hashes here.

Supported by

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