Add 'HorizontalScroll'.

Related issues: #1957.
This commit is contained in:
Rodrigo Girão Serrão
2023-03-09 14:35:49 +00:00
parent 4ca62eee60
commit 90dce06eae
3 changed files with 47 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
- Breaking change: Added `toggle_button` attribute to RadioButton and Checkbox events, replaces `input` https://github.com/Textualize/textual/pull/1940 - Breaking change: Added `toggle_button` attribute to RadioButton and Checkbox events, replaces `input` https://github.com/Textualize/textual/pull/1940
- A percentage alpha can now be applied to a border https://github.com/Textualize/textual/issues/1863 - A percentage alpha can now be applied to a border https://github.com/Textualize/textual/issues/1863
- Added `Color.multiply_alpha`. - Added `Color.multiply_alpha`.
- Added `HorizontalScroll` https://github.com/Textualize/textual/issues/1957
### Fixed ### Fixed

View File

@@ -37,6 +37,18 @@ class Horizontal(Widget):
""" """
class HorizontalScroll(Widget):
"""A container widget which aligns children horizontally and overflows if needed."""
DEFAULT_CSS = """
HorizontalScroll {
height: 1fr;
layout: horizontal;
overflow-x: auto;
}
"""
class Grid(Widget): class Grid(Widget):
"""A container widget with grid alignment.""" """A container widget with grid alignment."""

34
tests/test_containers.py Normal file
View File

@@ -0,0 +1,34 @@
"""Test basic functioning of some containers."""
from textual.app import App, ComposeResult
from textual.containers import Horizontal, HorizontalScroll
from textual.widgets import Label
async def test_horizontal_vs_horizontalscroll_scrolling():
"""Check the default scrollbar behaviours for Horizontal and HorizontalScroll."""
class HorizontalsApp(App[None]):
CSS = """
Screen {
layout: vertical;
}
"""
def compose(self) -> ComposeResult:
with Horizontal():
for _ in range(10):
yield Label("How is life going? " * 3 + " | ")
with HorizontalScroll():
for _ in range(10):
yield Label("How is life going? " * 3 + " | ")
WIDTH = 80
HEIGHT = 24
app = HorizontalsApp()
async with app.run_test(size=(WIDTH, HEIGHT)):
horizontal = app.query_one(Horizontal)
horizontal_scroll = app.query_one(HorizontalScroll)
assert horizontal.size.height == horizontal_scroll.size.height
assert horizontal.scrollbars_enabled == (False, False)
assert horizontal_scroll.scrollbars_enabled == (False, True)