Rich.tui is a TUI (Text User Interface) framework for Python using Rich as a renderer.

Overview

rich.tui

Rich.tui is a TUI (Text User Interface) framework for Python using Rich as a renderer.

The end goal is to be able to rapidly create rich terminal applications that look as good as possible (within the restrictions imposed by a terminal emulator).

Rich TUI will integrate tightly with its parent project, Rich. Any of the existing renderables can be used in a more dynamic application.

This project is currently a work in progress and may not be usable for a while. Follow @willmcgugan for progress updates, or post in Discussions if you have any requests / suggestions.

screenshot

Comments
  • Implement Windows Driver

    Implement Windows Driver

    Trying to run the textual.app example on Windows 10 with Python 3.9.5:

    ➜ python -m textual.app
    Traceback (most recent call last):
     File "C:\Program Files\Python39\lib\runpy.py", line 197, in _run_module_as_main
       return _run_code(code, main_globals, None,
     File "C:\Program Files\Python39\lib\runpy.py", line 87, in _run_code
       exec(code, run_globals)
     File "C:\CodeProjects\Python\Manim\manimvenv\lib\site-packages\textual\app.py", line 19, in <module>
       from .driver import Driver
     File "C:\CodeProjects\Python\Manim\manimvenv\lib\site-packages\textual\driver.py", line 8, in <module>
       import curses
     File "C:\Program Files\Python39\lib\curses\__init__.py", line 13, in <module>
       from _curses import *
    ModuleNotFoundError: No module named '_curses'
    
    Task 
    opened by kilacoda-old 29
  • As of 0.6.0, bindings on (at least) `left`, `right`, `up` and `down` no longer appear to work

    As of 0.6.0, bindings on (at least) `left`, `right`, `up` and `down` no longer appear to work

    With Textual 0.5.0 I had bindings on the arrow keys that worked fine. Having upgraded to 0.6.0 those bindings no longer seem to work. Isolating the issue I can recreate with this code (some other keys thrown in as control tests)

    from textual.app import App, ComposeResult
    from textual.widgets import TextLog, Header, Footer
    from textual.binding import Binding
    from textual.events import Key
    
    class Binder( App[ None ] ):
    
        CSS = """
        TextLog {
            background: #222200;
            color: #BBBB00;
            text-style: bold;
        }
        """
    
        BINDINGS = [
            Binding( "up",    "log( 'up' )", "Up" ),
            Binding( "down",  "log( 'down' )", "Down" ),
            Binding( "left",  "log( 'left' )", "Left" ),
            Binding( "right", "log( 'right' )", "Right" ),
            Binding( "a", "log( 'a' )", "a" ),
            Binding( "s", "log( 's' )", "s" ),
            Binding( "d", "log( 'd' )", "d" ),
            Binding( "f", "log( 'f' )", "f" ),
            Binding( "left_square_bracket", "log( '[' )", "[" ),
            Binding( "right_square_bracket", "log( ']' )", "]" ),
        ]
    
        def compose( self ) -> ComposeResult:
            yield Header()
            yield TextLog()
            yield Footer()
    
        def on_mount( self ) -> None:
            self.query_one( TextLog ).write( "Ready..." )
            self.query_one( TextLog ).write( "Key bindings being looked for:" )
            self.query_one( TextLog ).write( ", ".join(
                [ binding.key for binding in self.BINDINGS ]
            ) )
    
        def action_log( self, name: str ) -> None:
            self.query_one( TextLog ).write( f"Via binding: {name}" )
    
        def on_key( self, event: Key ) -> None:
            self.query_one( TextLog ).write( f"Via event: {event!r}" )
    
    if __name__ == "__main__":
        Binder().run()
    

    Running the above, pressing the arrow keys vs some of the other keys...

    Screenshot 2022-12-12 at 11 25 12

    bug 
    opened by davep 21
  • Method to run code in a thread

    Method to run code in a thread

    I'd like to add a convenient method to execute in job in a thread.

    It would probably be added to message pump (used by app / widgets).

    It should allow a method to be called with arbitrary parameters, and should return an awaitable.

    await self.call_threaded(my_code, "foo", "bar")
    

    I can see this being used for jobs such as reading from disk (which at the moment blocks the vent loop).

    Some considerations: a thread pool may be appropriate. We don't want this to be unbounded and potentially launch an unlimited number of threads. It should probably work with both async and sync functions, which will require a little inspection. If you want to tackle this, please discuss your ideas here first.

    help wanted level:moderate 
    opened by willmcgugan 16
  • error when running examples

    error when running examples

    i installed textual with pip and i tried to run the first example in the readme with python3 filename.py but i get the error TypeError: on_key() takes 1 positional argument but 2 were given when i press a key. got a similiar error with another example. sorry if im being dumb : p

    opened by itsUrcute 16
  • Add more easing functions

    Add more easing functions

    There are a number of 'easing functions' used by the animation system. At the top of _animator.py you will see the following:

    EASING = {
        "none": lambda x: 1.0,
        "round": lambda x: 0.0 if x < 0.5 else 1.0,
        "linear": lambda x: x,
        "in_cubic": lambda x: x * x * x,
        "in_out_cubic": lambda x: 4 * x * x * x if x < 0.5 else 1 - pow(-2 * x + 2, 3) / 2,
        "out_cubic": lambda x: 1 - pow(1 - x, 3),
    }
    

    These function have been copied from https://easings.net/ and translated from Javascript to Python. I would like to add the remaining functions to the EASING dict above.

    See the animation.py example as a way of testing the above functions.

    help wanted good first issue 
    opened by willmcgugan 15
  • [colors] Add a

    [colors] Add a "auto" color

    When text has color: auto [percentage] it will be displayed with the contrasting colour of its background

    As a result we can have widgets that have color: auto; in their CSS, and see their text colour automatically adapted to their background: Screenshot from 2022-06-29 14-33-56

    opened by olivierphi 14
  • feat: initial datatable reactive values

    feat: initial datatable reactive values

    For #1164, adds the six reactive attributes listed in the docs for DataTable to __init__. I noticed the class has three more reactive attributes (cursor_type, cursor_cell, and hover_cell) that aren't listed, but I left those out. Let me know if any of them should also be included.

    opened by aaronst 13
  • Unclosed event loop with easing example

    Unclosed event loop with easing example

    Every time I close the easing example. I get the following error:

    /usr/lib/python3.9/asyncio/base_events.py:681: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=False>
      _warn(f"unclosed event loop {self!r}", ResourceWarning, source=self)
    ResourceWarning: Enable tracemalloc to get the object allocation traceback
    

    I am thinking there are still messages processing at shutdown that are keeping the loop running, but I have not been able to track down the root cause yet.

    Possibly a similar issue to #82?

    OS: Manjaro Linux 21.1.4

    bug 
    opened by sanders41 13
  • Live console widget

    Live console widget

    It would be nice to have a widget that behaves like a console. At first, just able to print and auto-scroll, and scroll bar, with auto-refresh. console.print("another brick in the wall")

    Maybe reuse Rich's Live View / Console?

    opened by hajdbo 13
  • Wrong CSS styles being applied on hover

    Wrong CSS styles being applied on hover

    I noticed this when adding semantic style variants for Button.

    When I hover over the warning button, the border is being set to tall $primary-lighten-3. I would expect it to be set to tall $warning-lighten-3 given Button.-warning has higher specificity.

    Relevant CSS

        Button {
            border: tall $primary-lighten-3;
        }
        Button.-warning {
            background: $warning;
            color: $text-warning;
            border: tall $warning-lighten-3;  
        }
        
        Button.-warning :hover {
            background: $warning-darken-1;
            color: $text-warning-darken-1; 
        }
    
    bug 
    opened by darrenburns 12
  • Tabbed Widget

    Tabbed Widget

    What?

    This PR adds a widget that enables the user to define multiple views as so called tabs and receive a automagically generated bar of tab handles to switch between said views.

    🖼 Some Pictures

    The example code introduced in this PR produces the following: Screenshot 2021-08-11 at 19 09 04 Screenshot 2021-08-11 at 19 09 08 Screenshot 2021-08-11 at 19 09 11

    Some additional info

    • All 4 modes a tab handle can be in are "user-stylable". Those being default, hover, selected, and hover+selected.
    • The type of view a tab uses can be given by the user upon tab creation. Though this is not strictly necessary thanks to DockView.dock_grid().
    opened by timfi 12
  • Mouse click and scroll event support for git-bash/mintty on Windows

    Mouse click and scroll event support for git-bash/mintty on Windows

    The demo looks correct in git-bash on Windows, however it does not respond to mouse movement, click, and scroll events. It would be helpful to extend the existing drivers or driver selection to take this scenario into account. While the platform check will show "Windows", git-bash supports the event types in the Linux driver instead.

    0;70;13M #left mouse button down 0;70;13m #left mouse button up

    It's possible that a more nuanced environment check and loading the Linux driver in that case may enable it to work as expected.

    opened by ariker 1
  • add a

    add a "thin" horiz scrollbar

    First, a screenshot:

    Screen Shot 2022-12-31 at 21 12 24

    I don't like the horizontal scrollbar; even at "size" 1 it is still too fat. So I added an option for a "thin" version, refactoring ScrollBarRender along the way.

    I didn't presume to know how you'd like the CSS to behave, so I went for the simplest I could think of: add a new "scrollbar-thin" boolean style. I am not married to the css design around it, I really only want the "thin" version.

    There's no need to do anything special for a "thin" vertical scrollbar: imo it looks very nice at width 1.

    opened by nitzan-shaked 3
  • WIP: Colors: Add ansi_default and make ansi_* colors actually output their ansi sequences

    WIP: Colors: Add ansi_default and make ansi_* colors actually output their ansi sequences

    Please review the following checklist.

    • [X] Docstrings on all new or modified functions / classes
    • [X] Updated documentation
    • [X] Updated CHANGELOG.md (where appropriate)

    This is marked as WIP because I haven't tested this yet.

    opened by earboxer 3
  • MouseScrollUp/MouseScrollDown => plain MousEvent's

    MouseScrollUp/MouseScrollDown => plain MousEvent's

    ... which means they get passesd x, y, etc. In particular, they are passed the keyboard modifiers. This allows widgets to use e.g. ctrl-wheel to scroll right/left.

    opened by nitzan-shaked 0
  • basic typing fixes

    basic typing fixes

    Hello there. I've run in a small number of typing issues in Textual during my everyday use, and thought I'd attempt a fix in Textual itself.

    My ambitious goal is to run mypy --strict on all the codebase with zero warnings, and I'm about 50% of the way though. However that would be a non-small PR, so I thought I'd start with some obvious issues that should be easy to accept hopefully.

    I've included here a fairly small number of changes, all of which I consider "obvious fixes" in the sense that they either expose actual bugs that exist now, or they break Python contracts, which are bugs waiting to happen.

    I am going to annotate this PR with my reasoning below in a few minutes.

    I hope this is useful. Cheers.

    opened by nitzan-shaked 0
Releases(v0.9.1)
  • v0.9.1(Dec 30, 2022)

    Only Python 3.11 has a high resolution sleep by default. This adds a more accurate sleep for windows on Python < 3.11

    [0.9.1] - 2022-12-30

    Added

    • Added textual._win_sleep for Python on Windows < 3.11 https://github.com/Textualize/textual/pull/1457
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Dec 30, 2022)

    No new functionality so speak of, but performance has improved over the 0.8.x version. A change to how rendered content is stored has made updates faster.

    There is also a fix for slow updates on Windows. See this blog post for details.

    This is likely the last release of the year, so I would like to share this music video which seems strangely appropriate.

    https://www.youtube.com/watch?v=kAFxLXqP8UM&ab_channel=Nightwish

    [0.9.0] - 2022-12-30

    Added

    • Added textual.strip.Strip primitive
    • Added textual._cache.FIFOCache
    • Added an option to clear columns in DataTable.clear() https://github.com/Textualize/textual/pull/1427

    Changed

    • Widget.render_line now returns a Strip
    • Fix for slow updates on Windows
    • Bumped Rich dependency
    Source code(tar.gz)
    Source code(zip)
  • v0.8.2(Dec 28, 2022)

  • v0.8.1(Dec 25, 2022)

    I really should be pealing potatoes.

    [0.8.1] - 2022-12-25

    Fixed

    • Fix for overflowing tree issue https://github.com/Textualize/textual/issues/1425
    Source code(tar.gz)
    Source code(zip)
  • v0.8.0(Dec 22, 2022)

    Version 0.8.0 adds a new textual keys command which you can use to preview key events.

    There are a few minor breaking changes in this release. See below for details.

    Screenshot 2022-12-22 at 13 08 11

    [0.8.0] - 2022-12-22

    Fixed

    • Fixed issues with nested auto dimensions https://github.com/Textualize/textual/issues/1402
    • Fixed watch method incorrectly running on first set when value hasn't changed and init=False https://github.com/Textualize/textual/pull/1367
    • App.dark can now be set from App.on_load without an error being raised https://github.com/Textualize/textual/issues/1369
    • Fixed setting visibility changes needing a refresh https://github.com/Textualize/textual/issues/1355

    Added

    • Added textual.actions.SkipAction exception which can be raised from an action to allow parents to process bindings.
    • Added textual keys preview.
    • Added ability to bind to a character in addition to key name. i.e. you can bind to "." or "full_stop".
    • Added TextLog.shrink attribute to allow renderable to reduce in size to fit width.

    Changed

    • Deprecated PRIORITY_BINDINGS class variable.
    • Renamed char to character on Key event.
    • Renamed key_name to name on Key event.
    • Queries/walk_children no longer includes self in results by default https://github.com/Textualize/textual/pull/1416
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Dec 17, 2022)

    Mostly fixes in this release.

    [0.7.0] - 2022-12-17

    Added

    • Added PRIORITY_BINDINGS class variable, which can be used to control if a widget's bindings have priority by default. https://github.com/Textualize/textual/issues/1343

    Changed

    • Renamed the Binding argument universal to priority. https://github.com/Textualize/textual/issues/1343
    • When looking for bindings that have priority, they are now looked from App downwards. https://github.com/Textualize/textual/issues/1343
    • BINDINGS on an App-derived class have priority by default. https://github.com/Textualize/textual/issues/1343
    • BINDINGS on a Screen-derived class have priority by default. https://github.com/Textualize/textual/issues/1343
    • Added a message parameter to Widget.exit

    Fixed

    • Fixed validator not running on first reactive set https://github.com/Textualize/textual/pull/1359
    • Ensure only printable characters are used as key_display https://github.com/Textualize/textual/pull/1361
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Dec 11, 2022)

    See the blog post for the low down on this release.

    [0.6.0] - 2022-12-11

    Added

    • Added "inherited bindings" -- BINDINGS classvar will be merged with base classes, unless inherit_bindings is set to False
    • Added Tree widget which replaces TreeControl.
    • Added widget Placeholder https://github.com/Textualize/textual/issues/1200.

    Changed

    • Rebuilt DirectoryTree with new Tree control.
    • Empty containers with a dimension set to "auto" will now collapse instead of filling up the available space.
    • Container widgets now have default height of 1fr.
    • The default width of a Label is now auto.

    Fixed

    • Type selectors can now contain numbers https://github.com/Textualize/textual/issues/1253
    • Fixed visibility not affecting children https://github.com/Textualize/textual/issues/1313
    • Fixed issue with auto width/height and relative children https://github.com/Textualize/textual/issues/1319
    • Fixed issue with offset applied to containers https://github.com/Textualize/textual/issues/1256
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Nov 20, 2022)

    [0.5.0] - 2022-11-20

    Added

    • Add get_child_by_id and get_widget_by_id, remove get_child https://github.com/Textualize/textual/pull/1146
    • Add easing parameter to Widget.scroll_* methods https://github.com/Textualize/textual/pull/1144
    • Added Widget.call_later which invokes a callback on idle.
    • DOMNode.ancestors no longer includes self.
    • Added DOMNode.ancestors_with_self, which retains the old behaviour of DOMNode.ancestors.
    • Improved the speed of DOMQuery.remove.
    • Added DataTable.clear
    • Added low-level textual.walk methods.
    • It is now possible to await a Widget.remove. https://github.com/Textualize/textual/issues/1094
    • It is now possible to await a DOMQuery.remove. Note that this changes the return value of DOMQuery.remove, which used to return self. https://github.com/Textualize/textual/issues/1094
    • Added Pilot.wait_for_animation
    • Added Widget.move_child https://github.com/Textualize/textual/issues/1121
    • Added a Label widget https://github.com/Textualize/textual/issues/1190
    • Support lazy-instantiated Screens (callables in App.SCREENS) https://github.com/Textualize/textual/pull/1185
    • Display of keys in footer has more sensible defaults https://github.com/Textualize/textual/pull/1213
    • Add App.get_key_display, allowing custom key_display App-wide https://github.com/Textualize/textual/pull/1213

    Changed

    • Watchers are now called immediately when setting the attribute if they are synchronous. https://github.com/Textualize/textual/pull/1145
    • Widget.call_later has been renamed to Widget.call_after_refresh.
    • Button variant values are now checked at runtime. https://github.com/Textualize/textual/issues/1189
    • Added caching of some properties in Styles object

    Fixed

    • Fixed DataTable row not updating after add https://github.com/Textualize/textual/issues/1026
    • Fixed issues with animation. Now objects of different types may be animated.
    • Fixed containers with transparent background not showing borders https://github.com/Textualize/textual/issues/1175
    • Fixed auto-width in horizontal containers https://github.com/Textualize/textual/pull/1155
    • Fixed Input cursor invisible when placeholder empty https://github.com/Textualize/textual/pull/1202
    • Fixed deadlock when removing widgets from the App https://github.com/Textualize/textual/pull/1219
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Nov 8, 2022)

    Read the blog post: https://textual.textualize.io/blog/2022/11/08/version-040/#version-040

    [0.4.0] - 2022-11-08

    Changed

    • Dropped support for mounting "named" and "anonymous" widgets via App.mount and Widget.mount. Both methods now simply take one or more widgets as positional arguments.
    • DOMNode.query_one now raises a TooManyMatches exception if there is more than one matching node. https://github.com/Textualize/textual/issues/1096
    • App.mount and Widget.mount have new before and after parameters https://github.com/Textualize/textual/issues/778

    Added

    • Added init param to reactive.watch
    • CSS_PATH can now be a list of CSS files https://github.com/Textualize/textual/pull/1079
    • Added DOMQuery.only_one https://github.com/Textualize/textual/issues/1096
    • Writes to stdout are now done in a thread, for smoother animation. https://github.com/Textualize/textual/pull/1104
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Oct 31, 2022)

    A number of fixes, and internal enhancements.

    We have a new API for running textual apps asynchronously, and a much better way of running integration tests. Testing is important and we will be documenting this in a future release.

    Also in this release, we've made fr units more useful. These CSS units can be used to easily create flexible layouts. See the video below:

    https://user-images.githubusercontent.com/554369/199053126-e16c7047-11ae-4f97-95e7-ca264247184a.mov

    Here's the full changelog

    [0.3.0] - 2022-10-31

    Fixed

    • Fixed issue where scrollbars weren't being unmounted
    • Fixed fr units for horizontal and vertical layouts https://github.com/Textualize/textual/pull/1067
    • Fixed textual run breaking sys.argv https://github.com/Textualize/textual/issues/1064
    • Fixed footer not updating styles when toggling dark mode
    • Fixed how the app title in a Header is centred https://github.com/Textualize/textual/issues/1060
    • Fixed the swapping of button variants https://github.com/Textualize/textual/issues/1048
    • Fixed reserved characters in screenshots https://github.com/Textualize/textual/issues/993
    • Fixed issue with TextLog max_lines https://github.com/Textualize/textual/issues/1058

    Changed

    • DOMQuery now raises InvalidQueryFormat in response to invalid query strings, rather than cryptic CSS error
    • Dropped quit_after, screenshot, and screenshot_title from App.run, which can all be done via auto_pilot
    • Widgets are now closed in reversed DOM order
    • Input widget justify hardcoded to left to prevent text-align interference
    • Changed textual run so that it patches argv in more situations
    • DOM classes and IDs are now always treated fully case-sensitive https://github.com/Textualize/textual/issues/1047

    Added

    • Added Unmount event
    • Added App.run_async method
    • Added App.run_test context manager
    • Added auto_pilot to App.run and App.run_async
    • Added Widget._get_virtual_dom to get scrollbars
    • Added size parameter to run and run_async
    • Added always_update to reactive
    • Returned an awaitable from push_screen, switch_screen, and install_screen https://github.com/Textualize/textual/pull/1061
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Oct 22, 2022)

  • v0.2.0(Oct 22, 2022)

    This is a merge of the CSS branch with a whole load of amazing features. Hope you enjoy.

    We are now returning to regular releases and working in the open. Thanks for being patient.

    What's Changed

    • Outline by @willmcgugan in https://github.com/Textualize/textual/pull/195
    • Hover pseudo class by @willmcgugan in https://github.com/Textualize/textual/pull/201
    • Rename visible property to display, add setter by @darrenburns in https://github.com/Textualize/textual/pull/213
    • Visibility by @darrenburns in https://github.com/Textualize/textual/pull/212
    • Splitting out parsing of durations into new token types, avoiding Scalar by @darrenburns in https://github.com/Textualize/textual/pull/214
    • Invisible widgets now dont render by @darrenburns in https://github.com/Textualize/textual/pull/219
    • Use the layout as specified in CSS by @darrenburns in https://github.com/Textualize/textual/pull/225
    • Margin spacing is now invisible by @darrenburns in https://github.com/Textualize/textual/pull/221
    • Docstrings for styling properties by @darrenburns in https://github.com/Textualize/textual/pull/222
    • Underline bar renderable by @darrenburns in https://github.com/Textualize/textual/pull/246
    • Allow user to supply loop to App.run, ensure it closes by @darrenburns in https://github.com/Textualize/textual/pull/236
    • Tokenise CSS variables by @darrenburns in https://github.com/Textualize/textual/pull/250
    • Vertical layout by @darrenburns in https://github.com/Textualize/textual/pull/234
    • Horizontal layout by @darrenburns in https://github.com/Textualize/textual/pull/235
    • Variable support in CSS by @darrenburns in https://github.com/Textualize/textual/pull/258
    • Sparklines by @darrenburns in https://github.com/Textualize/textual/pull/269
    • Inline styles view by @willmcgugan in https://github.com/Textualize/textual/pull/254
    • Render opacity by @darrenburns in https://github.com/Textualize/textual/pull/272
    • Update pyproject.toml homepage link, add docs readme by @darrenburns in https://github.com/Textualize/textual/pull/268
    • Opacity rules by @darrenburns in https://github.com/Textualize/textual/pull/279
    • Tabs by @darrenburns in https://github.com/Textualize/textual/pull/293
    • Bump docs dev dependencies, add Tabs page, add note to docs README by @darrenburns in https://github.com/Textualize/textual/pull/301
    • Layout Resolver enhancement by @willmcgugan in https://github.com/Textualize/textual/pull/295
    • Implement CSS defaults by @willmcgugan in https://github.com/Textualize/textual/pull/294
    • Test animation by @willmcgugan in https://github.com/Textualize/textual/pull/303
    • Query dom - get child by @darrenburns in https://github.com/Textualize/textual/pull/306
    • Regions by @darrenburns in https://github.com/Textualize/textual/pull/319
    • Compositor refactor by @willmcgugan in https://github.com/Textualize/textual/pull/333
    • Add conversion to/from the CIE-L*ab color space. by @rodrigogiraoserrao in https://github.com/Textualize/textual/pull/360
    • Stringify the cast type, for <3.10 support by @tusharsadhwani in https://github.com/Textualize/textual/pull/351
    • WIP New color class by @willmcgugan in https://github.com/Textualize/textual/pull/349
    • Timer fix by @willmcgugan in https://github.com/Textualize/textual/pull/372
    • Custom scrollbars by @willmcgugan in https://github.com/Textualize/textual/pull/376
    • require semi-colons by @willmcgugan in https://github.com/Textualize/textual/pull/377
    • Logging server by @darrenburns in https://github.com/Textualize/textual/pull/366
    • Ensure filename is passed to devtools from init by @darrenburns in https://github.com/Textualize/textual/pull/383
    • tweak to log by @willmcgugan in https://github.com/Textualize/textual/pull/384
    • Redirect standard output to devtools server and logfile by @darrenburns in https://github.com/Textualize/textual/pull/385
    • Textual CLI by @darrenburns in https://github.com/Textualize/textual/pull/397
    • CSS align and box model by @willmcgugan in https://github.com/Textualize/textual/pull/398
    • optimize crop by @willmcgugan in https://github.com/Textualize/textual/pull/414
    • fix for showing scrollbars by @willmcgugan in https://github.com/Textualize/textual/pull/416
    • [css branch] Update _style_properties.py by @lllama in https://github.com/Textualize/textual/pull/415
    • fix for escape key processing by @willmcgugan in https://github.com/Textualize/textual/pull/420
    • [widget] Add a test for types of values we handle in style's size by @olivierphi in https://github.com/Textualize/textual/pull/428
    • [css][bugfix] CSS colors can now have digits at the end of their names by @olivierphi in https://github.com/Textualize/textual/pull/441
    • [layout][bugfix] Horizontal & Vertical layouts shouldn't display children that have display: none by @olivierphi in https://github.com/Textualize/textual/pull/436
    • button widget by @willmcgugan in https://github.com/Textualize/textual/pull/432
    • [colors] Add management of named Web colors to our CSS processing, prefix ANSI ones with ansi_ by @olivierphi in https://github.com/Textualize/textual/pull/443
    • Style error improvements by @darrenburns in https://github.com/Textualize/textual/pull/408
    • fix broken align and error logic by @willmcgugan in https://github.com/Textualize/textual/pull/446
    • Add TEXTUAL features env var by @willmcgugan in https://github.com/Textualize/textual/pull/448
    • [css] Add a "did you mean" suggestion when an unknown CSS property is spotted by @olivierphi in https://github.com/Textualize/textual/pull/445
    • Omit style property setter frames from tracebacks by @darrenburns in https://github.com/Textualize/textual/pull/457
    • Support 3 and 4 character hex strings for colours by @darrenburns in https://github.com/Textualize/textual/pull/459
    • [CI] Check that the "basic.py" sandbox script can be run for a few seconds without crashing by @olivierphi in https://github.com/Textualize/textual/pull/449
    • Skip CI-based MacOS devtools tests by @darrenburns in https://github.com/Textualize/textual/pull/461
    • Remove redundant import by @rjmill in https://github.com/Textualize/textual/pull/460
    • Add Python 3.10 to GitHub actions, upgrade mypy by @darrenburns in https://github.com/Textualize/textual/pull/462
    • Add links to CHANGELOG and fix date for v0.1.18 by @bbugyi200 in https://github.com/Textualize/textual/pull/454
    • Fix README.md typo disapointment->disappointment by @toonarmycaptain in https://github.com/Textualize/textual/pull/453
    • Fix broken overflow CSS rule by @darrenburns in https://github.com/Textualize/textual/pull/467
    • Update connection instructions in devtools header by @darrenburns in https://github.com/Textualize/textual/pull/469
    • Remove codecov from Textual by @darrenburns in https://github.com/Textualize/textual/pull/470
    • Windows CI by @darrenburns in https://github.com/Textualize/textual/pull/464
    • Tab focus by @willmcgugan in https://github.com/Textualize/textual/pull/458
    • [API] Start accepting PathLike objects here and there by @olivierphi in https://github.com/Textualize/textual/pull/463
    • line between logs by @willmcgugan in https://github.com/Textualize/textual/pull/478
    • added auto height by @willmcgugan in https://github.com/Textualize/textual/pull/476
    • CSS focus-within pseudo selector by @darrenburns in https://github.com/Textualize/textual/pull/477
    • diplay event method by @willmcgugan in https://github.com/Textualize/textual/pull/480
    • [tests] Add an integration test for the vertical layout, fix the bug that messes up the layout when the children have align: center top; by @olivierphi in https://github.com/Textualize/textual/pull/482
    • Added scroll_to_widget by @willmcgugan in https://github.com/Textualize/textual/pull/483
    • Scroll to top when widget is larger than container by @willmcgugan in https://github.com/Textualize/textual/pull/492
    • Add style param to Widget render method by @darrenburns in https://github.com/Textualize/textual/pull/479
    • [css] Add a "Did you mean" suggestion when the value of a color is wrong but we can find a close one by @olivierphi in https://github.com/Textualize/textual/pull/486
    • [tests][e2e] Add a test for Widget#scroll_to_widget() by @olivierphi in https://github.com/Textualize/textual/pull/494
    • Optimize Compositor by combining updates by @willmcgugan in https://github.com/Textualize/textual/pull/493
    • Msgpack devtools by @willmcgugan in https://github.com/Textualize/textual/pull/508
    • [App] Remove the focus timer: we now focus from a widget to the next/prev one instantly by @olivierphi in https://github.com/Textualize/textual/pull/505
    • added save_screenshot method and action by @willmcgugan in https://github.com/Textualize/textual/pull/511
    • Compositor deltas by @willmcgugan in https://github.com/Textualize/textual/pull/512
    • [css][scrollbar gutter] Manage the scrollbar-gutter: stable CSS property by @olivierphi in https://github.com/Textualize/textual/pull/501
    • Basic text input by @darrenburns in https://github.com/Textualize/textual/pull/495
    • [css] add "blank" border type by @olivierphi in https://github.com/Textualize/textual/pull/522
    • Auto dimensions by @willmcgugan in https://github.com/Textualize/textual/pull/527
    • Box fix by @willmcgugan in https://github.com/Textualize/textual/pull/532
    • Fix escape key by @willmcgugan in https://github.com/Textualize/textual/pull/534
    • compensated in box mode for scrollbars by @willmcgugan in https://github.com/Textualize/textual/pull/535
    • Mock time during integration tests by @olivierphi in https://github.com/Textualize/textual/pull/507
    • docs plugin by @willmcgugan in https://github.com/Textualize/textual/pull/536
    • Fix Option+Backspace hanging by @willmcgugan in https://github.com/Textualize/textual/pull/539
    • Text input improvements by @darrenburns in https://github.com/Textualize/textual/pull/528
    • [css] add scrollbar-size properties by @olivierphi in https://github.com/Textualize/textual/pull/529
    • [terminal buffering] Add support for the "mode 2026" - aka SynchronizedOutput by @olivierphi in https://github.com/Textualize/textual/pull/533
    • Refresh scrollbars on style changes. by @darrenburns in https://github.com/Textualize/textual/pull/545
    • Docs Refresh by @willmcgugan in https://github.com/Textualize/textual/pull/540
    • [AppTest] hotfix for the "css" branch after commit d45b0448880 by @olivierphi in https://github.com/Textualize/textual/pull/550
    • Swap ControlShiftUp & ControlShiftDown escape codes by @darrenburns in https://github.com/Textualize/textual/pull/549
    • Widget focus keybindings by @darrenburns in https://github.com/Textualize/textual/pull/546
    • Box model fractional by @willmcgugan in https://github.com/Textualize/textual/pull/552
    • simplify scrollbar dimensions by @willmcgugan in https://github.com/Textualize/textual/pull/553
    • Cache arrangements by @willmcgugan in https://github.com/Textualize/textual/pull/555
    • Fix scrollbar not updating with CSS animation by @willmcgugan in https://github.com/Textualize/textual/pull/558
    • Fix combined updates by @willmcgugan in https://github.com/Textualize/textual/pull/559
    • Inheritable CSS by @willmcgugan in https://github.com/Textualize/textual/pull/561
    • Scrolling nested containers by @darrenburns in https://github.com/Textualize/textual/pull/538
    • Support HSL colour space, allow spaces in RGB/HSL values by @darrenburns in https://github.com/Textualize/textual/pull/566
    • Support for bracketed paste mode by @darrenburns in https://github.com/Textualize/textual/pull/567
    • Make devtools deps extras, add note to internal ref docs, raise excep… by @darrenburns in https://github.com/Textualize/textual/pull/579
    • XTerm parsing improvements by @darrenburns in https://github.com/Textualize/textual/pull/570
    • Add success/warning/error button variants by @darrenburns in https://github.com/Textualize/textual/pull/575
    • [perf] Widget classes in textual.widget.__init__.py are now lazy-loaded by @olivierphi in https://github.com/Textualize/textual/pull/584
    • Tests around CSS specificity, and fix ordering in case of specificity clash by @darrenburns in https://github.com/Textualize/textual/pull/582
    • Adding space key to ansi sequences allows binding by @pvmm in https://github.com/Textualize/textual/pull/410
    • add space to keys by @willmcgugan in https://github.com/Textualize/textual/pull/585
    • Scroll view and DataTable Widget by @willmcgugan in https://github.com/Textualize/textual/pull/560
    • [tests] Restore layout integration tests by @olivierphi in https://github.com/Textualize/textual/pull/587
    • [button] Add a brief "active" effect when a button a clicked by @olivierphi in https://github.com/Textualize/textual/pull/588
    • Add a cursor to table by @willmcgugan in https://github.com/Textualize/textual/pull/591
    • User CSS should always take precedence over Widget CSS by @darrenburns in https://github.com/Textualize/textual/pull/595
    • Render cache by @willmcgugan in https://github.com/Textualize/textual/pull/602
    • Render enhancements by @willmcgugan in https://github.com/Textualize/textual/pull/606
    • Improvements to scroll_to_widget by @willmcgugan in https://github.com/Textualize/textual/pull/608
    • Small typo fix by @jacobtomlinson in https://github.com/Textualize/textual/pull/612
    • Color harmony by @willmcgugan in https://github.com/Textualize/textual/pull/619
    • Adds Layers and Docks by @willmcgugan in https://github.com/Textualize/textual/pull/627
    • Document CSS Styles by @willmcgugan in https://github.com/Textualize/textual/pull/629
    • Register callbacks at message pump level, invoke them after refresh by @darrenburns in https://github.com/Textualize/textual/pull/607
    • Focus order by @darrenburns in https://github.com/Textualize/textual/pull/638
    • restore missing callback by @willmcgugan in https://github.com/Textualize/textual/pull/649
    • Add remove by @willmcgugan in https://github.com/Textualize/textual/pull/653
    • center layout by @willmcgugan in https://github.com/Textualize/textual/pull/656
    • fix for layout bug by @willmcgugan in https://github.com/Textualize/textual/pull/662
    • unified events and messages by @willmcgugan in https://github.com/Textualize/textual/pull/660
    • CSS tie breaker by @willmcgugan in https://github.com/Textualize/textual/pull/665
    • partial tree control fix by @willmcgugan in https://github.com/Textualize/textual/pull/667
    • fix for footer by @willmcgugan in https://github.com/Textualize/textual/pull/670
    • Filling the gap between horizontal and vertical scrollbars by @darrenburns in https://github.com/Textualize/textual/pull/664
    • Screens API by @willmcgugan in https://github.com/Textualize/textual/pull/685
    • Improve error message for CSS syntax error by @darrenburns in https://github.com/Textualize/textual/pull/680
    • tests for auto refresh by @willmcgugan in https://github.com/Textualize/textual/pull/696
    • Docs scrollbar gutter by @darrenburns in https://github.com/Textualize/textual/pull/695
    • Animation callback by @darrenburns in https://github.com/Textualize/textual/pull/683
    • Docs content align by @darrenburns in https://github.com/Textualize/textual/pull/700
    • Docs intro by @willmcgugan in https://github.com/Textualize/textual/pull/703
    • Optimize applying CSS styles by @willmcgugan in https://github.com/Textualize/textual/pull/705
    • Docs layout by @darrenburns in https://github.com/Textualize/textual/pull/701
    • text-align CSS support by @darrenburns in https://github.com/Textualize/textual/pull/704
    • Values sections for CSS properties, some rewordings by @darrenburns in https://github.com/Textualize/textual/pull/713
    • table layout by @willmcgugan in https://github.com/Textualize/textual/pull/712
    • calculator example by @willmcgugan in https://github.com/Textualize/textual/pull/714
    • Delay transition by @darrenburns in https://github.com/Textualize/textual/pull/684
    • hotfix for justify by @willmcgugan in https://github.com/Textualize/textual/pull/717
    • Changes to opacity by @darrenburns in https://github.com/Textualize/textual/pull/720
    • CSS Path Relative by @darrenburns in https://github.com/Textualize/textual/pull/724
    • Log verbosity by @willmcgugan in https://github.com/Textualize/textual/pull/722
    • scrollbar fix by @willmcgugan in https://github.com/Textualize/textual/pull/726
    • Default css by @willmcgugan in https://github.com/Textualize/textual/pull/727
    • exclude invisible widgets by @willmcgugan in https://github.com/Textualize/textual/pull/728
    • private by @willmcgugan in https://github.com/Textualize/textual/pull/729
    • validate identifiers by @willmcgugan in https://github.com/Textualize/textual/pull/730
    • added char attribute to Text event by @willmcgugan in https://github.com/Textualize/textual/pull/732
    • App docs by @willmcgugan in https://github.com/Textualize/textual/pull/733
    • Fix auto height layout by @willmcgugan in https://github.com/Textualize/textual/pull/739
    • Make dark mode default by @darrenburns in https://github.com/Textualize/textual/pull/743
    • tree fix by @willmcgugan in https://github.com/Textualize/textual/pull/744
    • Easing preview by @darrenburns in https://github.com/Textualize/textual/pull/740
    • Code browser example by @willmcgugan in https://github.com/Textualize/textual/pull/746
    • Scroll issue by @willmcgugan in https://github.com/Textualize/textual/pull/747
    • focus level bindings by @willmcgugan in https://github.com/Textualize/textual/pull/751
    • App log by @willmcgugan in https://github.com/Textualize/textual/pull/753
    • Layout order by @willmcgugan in https://github.com/Textualize/textual/pull/755
    • Readme by @willmcgugan in https://github.com/Textualize/textual/pull/758
    • auto color by @willmcgugan in https://github.com/Textualize/textual/pull/763
    • Update various broken variables by @darrenburns in https://github.com/Textualize/textual/pull/764
    • Layer order by @willmcgugan in https://github.com/Textualize/textual/pull/765
    • fixes for variable css errors by @willmcgugan in https://github.com/Textualize/textual/pull/768
    • Add verbose tag to events docs by @darrenburns in https://github.com/Textualize/textual/pull/773
    • docs/widgets/Button by @darrenburns in https://github.com/Textualize/textual/pull/769
    • Grid cell margin by @darrenburns in https://github.com/Textualize/textual/pull/772
    • Docs styles by @willmcgugan in https://github.com/Textualize/textual/pull/775
    • Add docs for CSS variables by @darrenburns in https://github.com/Textualize/textual/pull/780
    • Fix broken text in docs by @darrenburns in https://github.com/Textualize/textual/pull/781
    • Initial layout guide stuff by @darrenburns in https://github.com/Textualize/textual/pull/748
    • Log drop critical by @willmcgugan in https://github.com/Textualize/textual/pull/782
    • Document styles by @darrenburns in https://github.com/Textualize/textual/pull/785
    • Minimise rendering when text-opacity/opacity is zero by @darrenburns in https://github.com/Textualize/textual/pull/774
    • Docs events by @willmcgugan in https://github.com/Textualize/textual/pull/787
    • changed to CSS_PATH by @willmcgugan in https://github.com/Textualize/textual/pull/789
    • Expand shrink by @willmcgugan in https://github.com/Textualize/textual/pull/794
    • Remove docks references & other tidying by @darrenburns in https://github.com/Textualize/textual/pull/795
    • Snapshot testing by @darrenburns in https://github.com/Textualize/textual/pull/793
    • Docs for widgets by @willmcgugan in https://github.com/Textualize/textual/pull/800
    • Docs input by @willmcgugan in https://github.com/Textualize/textual/pull/801
    • new align by @willmcgugan in https://github.com/Textualize/textual/pull/802
    • Docs actions by @willmcgugan in https://github.com/Textualize/textual/pull/804
    • Get widget by @willmcgugan in https://github.com/Textualize/textual/pull/808
    • New input by @willmcgugan in https://github.com/Textualize/textual/pull/811
    • optimizations for compositor by @willmcgugan in https://github.com/Textualize/textual/pull/812
    • Docs for reactivity by @willmcgugan in https://github.com/Textualize/textual/pull/815
    • Fix comma separated string in "Bindings" by @darrenburns in https://github.com/Textualize/textual/pull/797
    • Document widgets by @darrenburns in https://github.com/Textualize/textual/pull/819
    • Docs screen by @willmcgugan in https://github.com/Textualize/textual/pull/824
    • Bump 0.2.0 BETA by @willmcgugan in https://github.com/Textualize/textual/pull/822
    • change typing-extensions dependancy by @willmcgugan in https://github.com/Textualize/textual/pull/825
    • Too many "haves" by @driscollis in https://github.com/Textualize/textual/pull/827
    • Highlight import of Container class by @driscollis in https://github.com/Textualize/textual/pull/830
    • Fix some minor typos about the Stopwatch widget by @driscollis in https://github.com/Textualize/textual/pull/831
    • Py typed by @willmcgugan in https://github.com/Textualize/textual/pull/836
    • Note timers ID added to Container object by @kimvanwyk in https://github.com/Textualize/textual/pull/832
    • Highlight changed set_interval line in stopwatch06 example by @kimvanwyk in https://github.com/Textualize/textual/pull/833
    • Table polish by @willmcgugan in https://github.com/Textualize/textual/pull/837
    • Initialize reactive variables earlier by @willmcgugan in https://github.com/Textualize/textual/pull/838
    • fix error on exit from textual console by @willmcgugan in https://github.com/Textualize/textual/pull/841
    • Docs for Animator by @darrenburns in https://github.com/Textualize/textual/pull/840
    • Flag to enable header clock by @darrenburns in https://github.com/Textualize/textual/pull/843
    • Fix minor readability issue in modifying CSS class by @driscollis in https://github.com/Textualize/textual/pull/844
    • Regions optimize by @willmcgugan in https://github.com/Textualize/textual/pull/855
    • monochrome tests by @willmcgugan in https://github.com/Textualize/textual/pull/856
    • Fix issues with Styles.css, update "Grid" styles doc page by @darrenburns in https://github.com/Textualize/textual/pull/854
    • Docs queries by @willmcgugan in https://github.com/Textualize/textual/pull/857
    • DOM Queries typo squish by @davep in https://github.com/Textualize/textual/pull/858
    • Documenting comma-separated bindings in docstring and guide by @darrenburns in https://github.com/Textualize/textual/pull/853
    • Cli colors by @willmcgugan in https://github.com/Textualize/textual/pull/863
    • Typo fix: styles belong to a widget by @davep in https://github.com/Textualize/textual/pull/859
    • Support for key aliases, key handling tests by @darrenburns in https://github.com/Textualize/textual/pull/852
    • add max_idle for screen by @willmcgugan in https://github.com/Textualize/textual/pull/869
    • Update docs: fix copy/paste error for Timers by @lllama in https://github.com/Textualize/textual/pull/879
    • Provide extra hinting for App.query by @davep in https://github.com/Textualize/textual/pull/883
    • Document links by @darrenburns in https://github.com/Textualize/textual/pull/868
    • Win slow by @willmcgugan in https://github.com/Textualize/textual/pull/881
    • Harmonise the types of the App's css path declarations by @davep in https://github.com/Textualize/textual/pull/876
    • update borders with css by @willmcgugan in https://github.com/Textualize/textual/pull/889
    • docs: typos by @aaronst in https://github.com/Textualize/textual/pull/887
    • Fix :focus-within pseudo-selector by @darrenburns in https://github.com/Textualize/textual/pull/885
    • Move focus logic to screen, add more key replacements, collapse bindings in footer by @darrenburns in https://github.com/Textualize/textual/pull/880
    • Use screen offset instead of offset by @darrenburns in https://github.com/Textualize/textual/pull/893
    • Modify the screen examples to import Screen from textual.screen by @davep in https://github.com/Textualize/textual/pull/888
    • Fix _reset_focus being called on app instead of Screen by @darrenburns in https://github.com/Textualize/textual/pull/895
    • Fix textual run path bug on Windows by @darrenburns in https://github.com/Textualize/textual/pull/899
    • Remove unused code by @darrenburns in https://github.com/Textualize/textual/pull/896
    • depth first search by @willmcgugan in https://github.com/Textualize/textual/pull/902
    • Add password as a Input keyword argument by @davep in https://github.com/Textualize/textual/pull/911
    • CSS docs review - Layout by @davep in https://github.com/Textualize/textual/pull/913
    • CSS docs review - Events and Messages by @davep in https://github.com/Textualize/textual/pull/914
    • Reviewing CSS docs by @davep in https://github.com/Textualize/textual/pull/898
    • CSS docs review - CSS by @davep in https://github.com/Textualize/textual/pull/906
    • Get rid of string split key display, bug fix for not showing screen-level bindings by @darrenburns in https://github.com/Textualize/textual/pull/910
    • CSS docs review - Actions by @davep in https://github.com/Textualize/textual/pull/916
    • CSS docs review - Input by @davep in https://github.com/Textualize/textual/pull/915
    • CSS docs review - Styles by @davep in https://github.com/Textualize/textual/pull/904
    • CSS docs review - Reactivity by @davep in https://github.com/Textualize/textual/pull/918
    • README has 'development development' by @adam-huganir in https://github.com/Textualize/textual/pull/920
    • CSS docs review - Widgets by @davep in https://github.com/Textualize/textual/pull/921
    • CSS docs review - Animation by @davep in https://github.com/Textualize/textual/pull/922
    • CSS docs review - Screens by @davep in https://github.com/Textualize/textual/pull/923
    • CSS docs review - Styles reference by @davep in https://github.com/Textualize/textual/pull/925
    • CSS docs review - Events by @davep in https://github.com/Textualize/textual/pull/924
    • CSS docs review - Widgets reference by @davep in https://github.com/Textualize/textual/pull/926
    • Roadmap by @willmcgugan in https://github.com/Textualize/textual/pull/927
    • wait for mount by @willmcgugan in https://github.com/Textualize/textual/pull/912
    • fix cursor delete issue by @willmcgugan in https://github.com/Textualize/textual/pull/931
    • fix error with text-log in docs by @willmcgugan in https://github.com/Textualize/textual/pull/932
    • Some bug fixes in Input + add title to App constructor by @darrenburns in https://github.com/Textualize/textual/pull/934
    • Mention ordering of superpower methods in docs by @darrenburns in https://github.com/Textualize/textual/pull/935
    • fix focus glitch by @willmcgugan in https://github.com/Textualize/textual/pull/936
    • fix alignment bug by @willmcgugan in https://github.com/Textualize/textual/pull/937
    • Add directory of file to run to sys path by @darrenburns in https://github.com/Textualize/textual/pull/947
    • key bindings refactor by @willmcgugan in https://github.com/Textualize/textual/pull/941
    • Add support for action handlers prefixed with _ by @darrenburns in https://github.com/Textualize/textual/pull/946
    • Checkbox polishing + fix auto-width in Horizontal layout by @darrenburns in https://github.com/Textualize/textual/pull/942
    • Ensure scroll events are forwarded to the screen by @darrenburns in https://github.com/Textualize/textual/pull/948
    • Minor doc fixes by @MatrixManAtYrService in https://github.com/Textualize/textual/pull/938
    • docs: remove center layout by @aaronst in https://github.com/Textualize/textual/pull/949
    • Fix variables in Screens, remove dark reactive from Screen by @darrenburns in https://github.com/Textualize/textual/pull/957
    • Modify DOMNode.walk_children to return a list by @davep in https://github.com/Textualize/textual/pull/952
    • Try and better settle focus after a focused widget is removed (redux) by @davep in https://github.com/Textualize/textual/pull/954
    • Populate character on simulated key presses by @darrenburns in https://github.com/Textualize/textual/pull/960
    • Review the use of the bell in various examples and documentation files by @davep in https://github.com/Textualize/textual/pull/958
    • Post-PR #954 tidy up by @davep in https://github.com/Textualize/textual/pull/961
    • Fix bindings as tuples by @darrenburns in https://github.com/Textualize/textual/pull/962
    • Color animate alpha by @darrenburns in https://github.com/Textualize/textual/pull/964
    • Fix color preview by @darrenburns in https://github.com/Textualize/textual/pull/967
    • Update the calculator example to make all keyboard keys work again by @davep in https://github.com/Textualize/textual/pull/968
    • Initial pull of 5x5 into the Textual examples directory by @davep in https://github.com/Textualize/textual/pull/963
    • Switch the dark mode toggle to Ctrl+D by @davep in https://github.com/Textualize/textual/pull/970
    • adds demo by @willmcgugan in https://github.com/Textualize/textual/pull/959
    • docs: remove extra the by @aaronst in https://github.com/Textualize/textual/pull/976
    • added version number to demo, bumped beta by @willmcgugan in https://github.com/Textualize/textual/pull/977
    • Bump020 by @willmcgugan in https://github.com/Textualize/textual/pull/978
    • CSS by @willmcgugan in https://github.com/Textualize/textual/pull/979
    • lock update by @willmcgugan in https://github.com/Textualize/textual/pull/981
    • Abs readme links by @willmcgugan in https://github.com/Textualize/textual/pull/982

    New Contributors

    • @darrenburns made their first contribution in https://github.com/Textualize/textual/pull/213
    • @olivierphi made their first contribution in https://github.com/Textualize/textual/pull/428
    • @rjmill made their first contribution in https://github.com/Textualize/textual/pull/460
    • @bbugyi200 made their first contribution in https://github.com/Textualize/textual/pull/454
    • @toonarmycaptain made their first contribution in https://github.com/Textualize/textual/pull/453
    • @pvmm made their first contribution in https://github.com/Textualize/textual/pull/410
    • @jacobtomlinson made their first contribution in https://github.com/Textualize/textual/pull/612
    • @driscollis made their first contribution in https://github.com/Textualize/textual/pull/827
    • @kimvanwyk made their first contribution in https://github.com/Textualize/textual/pull/832
    • @davep made their first contribution in https://github.com/Textualize/textual/pull/858
    • @aaronst made their first contribution in https://github.com/Textualize/textual/pull/887
    • @adam-huganir made their first contribution in https://github.com/Textualize/textual/pull/920
    • @MatrixManAtYrService made their first contribution in https://github.com/Textualize/textual/pull/938

    Full Changelog: https://github.com/Textualize/textual/compare/v0.1.18...v0.2.0

    Source code(tar.gz)
    Source code(zip)
  • v0.1.18(Apr 30, 2022)

  • v0.1.17(Mar 10, 2022)

  • v0.1.16(Mar 10, 2022)

  • v0.1.15(Jan 31, 2022)

    Windows support has landed. Still experimental -- let us know if you run in to any problems!

    [0.1.15] - 2022-01-31

    Added

    • Added Windows Driver
    Source code(tar.gz)
    Source code(zip)
  • v0.1.14(Jan 9, 2022)

  • v0.1.13(Jan 1, 2022)

    [0.1.13] - 2022-01-01

    Fixed

    • Fixed spurious characters when exiting app https://github.com/willmcgugan/textual/issues/82
    • Fixed increasing delay when exiting
    Source code(tar.gz)
    Source code(zip)
  • v0.1.11(Sep 12, 2021)

    [0.1.11] - 2021-09-12

    Changed

    • Changed message handlers to use prefix handle_
    • Renamed messages to drop the Message suffix
    • Events now bubble by default
    • Refactor of layout

    Added

    • Added App.measure
    • Added auto_width to Vertical Layout, WindowView, an ScrollView
    • Added big_table.py example
    • Added easing.py example
    Source code(tar.gz)
    Source code(zip)
  • v0.1.10(Aug 25, 2021)

    [0.1.10] - 2021-08-25

    Added

    • Added keyboard control of tree control
    • Added Widget.gutter to calculate space between renderable and outside edge
    • Added margin, padding, and border attributes to Widget

    Changed

    • Callbacks may be async or non-async.
    • Event handler event argument is optional.
    • Fixed exception in clock example https://github.com/willmcgugan/textual/issues/52
    • Added Message.wait() which waits for a message to be processed
    • Key events are now sent to widgets first, before processing bindings
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Jul 5, 2021)

    In this version there is a new more-powerful renderer that supports overlapping regions. There is also a new layout engine which is more intuitive that Rich's Layout clas.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Jun 24, 2021)

Owner
Will McGugan
I'm a full-stack software developer, and Python expert. Creator of Rich and @PyFilesystem.
Will McGugan
guietta - a tool for making simple Python GUIs

guietta - a tool for making simple Python GUIs

Alfio Puglisi 1.9k Jan 08, 2023
Advanced GUI Calculator with Beautiful UI and Clear Code.

Advanced GUI Calculator with Beautiful UI and Clear Code.

Mohammad Dori 3 Jul 15, 2022
A Python native, OS native GUI toolkit.

Toga A Python native, OS native GUI toolkit. Prerequisites Minimum requirements Toga requires Python 3. Python 2 is not supported. If you're on macOS,

BeeWare 3.3k Jan 02, 2023
Tkinter Designer - Create Beautiful Tkinter GUIs by Drag and Drop.

Tkinter Designer is created to speed up and beautify Python GUI Experience. It uses well know design software called Figma. Which makes creating Tkinter GUI in Python a piece of cake.

Parth Jadhav 5.2k Jan 09, 2023
Yasb is a highly configurable and hackable taskbar written in python with Qt6.

Yasb: Yet Another Status Bar Yasb is a highly configurable and hackable taskbar written in python with Qt6. This project is still in (very) early deve

Dan 355 Jan 01, 2023
A system tray application written in python that will assist you with your keyboard endeavors.

A system tray application written in python that will assist you with your keyboard endeavors. It has features such as abbreviation, email autofill, media control, writing from clipboard ,typing curr

Mach50 1 Dec 15, 2021
QGUI - 0.1MB超轻量Python GUI框架,用模板来快捷制作深度学习模型推理界面

QGUI - 0.1MB超轻量Python GUI框架,用模板来快捷制作深度学习模型推理界面

QPT Family 92 Nov 18, 2022
Basic browser based on PyQt5

goneDev-browser "basic browser based on PyQt5" This application is primarily built on macOS with more adaptibility for MacOS than Windows. v1.0 will s

Harsh ADV) 1 Jan 19, 2022
Create highly interactive web pages purely in Python

A package for building highly interactive user interfaces in pure Python inspired by ReactJS.

701 Jan 03, 2023
A GUI Based Figlet Maker

Figlet Creation Create Figlets easily using this application created using PySimpleGUI. Installation Old-school Straight Pip pip install psg-figlet pi

PySimpleGUI 8 Jan 06, 2023
A Virtual Desktop Assistant Written in Python

DesktopAssitant A Virtual Desktop Assistant Written in Python. It's generally a basic virtual assistant The basic purpose of this is to make work easi

Technerd Brainiac 597 Dec 31, 2022
Easily display all of your creative avatars to keep them consistent across websites.

PyAvatar Easily display all of your creative avatars to keep them consistent across websites. Key Features • Download • How To Use • Support • Contrib

William 2 Oct 02, 2022
Signin/Signup GUI form using tkinter in python

SignIn-SignUpFormRepo Hello there, I am Shahid and this is the Signin/Signup GUI form using tkinter in python if you want to use avatar images then pa

Shahid Akhtar 1 Nov 09, 2021
Edifice: a declarative GUI library for Python

Edifice is a Python library for building reactive UI, inspired by modern Javascript libraries such as React.

David Ding 193 Dec 11, 2022
A Minimalistic Backup GUI for your Windows, Mac or Linux

BlobBackup is a minimalistic backup utility for your Windows, Mac or Linux computer. With an excellent engine, extensive storage support, and an easy

283 Nov 30, 2022
Projeto de mini-games de azar com interface gráfica utilizando Python e PySimpleGui.

Gambling Mini jogos de azar unidos em uma mesma interface gráfica, utilizando a linguagem de programação Python em conjunto com a biblioteca de interf

Clayton Garcia da Silva 3 Nov 19, 2021
Criando interfaces gráficas com Python e Qt 6 (PyQt6)

Criando interfaces gráficas com Python e Qt 6 (PyQt6) Qt O Qt é um framework para criação de interfaces gráficas multiplataforma, atualmente ele é des

Renato Cruz 1 Jun 07, 2022
Pyint is the graphic software which is written in Python

Pyint About Pyint Pyint is the graphic software which is written in Python(I use the Turtle graphics). The name 'Pyint' is compound word of 'Python' a

John 1 Nov 06, 2021
A Windows Dock Widget Written In Pure Python

VEПUS A Windows Dock Widget Written In Pure Python What is Venus? Venus is a Dock Widget for your desktops interface. It adds a couple of really cool

Secrets 18 Dec 30, 2022
AutoKey, a desktop automation utility for Linux and X11.

AutoKey Contents About Installation Zero-installation Method Documentation Support Bug reports and Pull Requests Changelog License About AutoKey, a de

2.5k Dec 31, 2022