add option to clear columns in DataTable.clear

This commit is contained in:
Josh Karpel
2022-12-21 16:57:43 -06:00
parent cef386a40a
commit a45a3dca6a
3 changed files with 30 additions and 1 deletions

View File

@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/) The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/). and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.8.3] - Unreleased
### Added
- Added an option to clear columns in DataTable.clear() https://github.com/Textualize/textual/pull/1427
## [0.8.2] - 2022-12-28 ## [0.8.2] - 2022-12-28
### Fixed ### Fixed

View File

@@ -312,7 +312,7 @@ class DataTable(ScrollView, Generic[CellType], can_focus=True):
cell_region = Region(x, y, width, height) cell_region = Region(x, y, width, height)
return cell_region return cell_region
def clear(self) -> None: def clear(self, columns: bool = False) -> None:
"""Clear the table. """Clear the table.
Args: Args:
@@ -323,6 +323,8 @@ class DataTable(ScrollView, Generic[CellType], can_focus=True):
self._y_offsets.clear() self._y_offsets.clear()
self.data.clear() self.data.clear()
self.rows.clear() self.rows.clear()
if columns:
self.columns.clear()
self._line_no = 0 self._line_no = 0
self._require_update_dimensions = True self._require_update_dimensions = True
self.refresh() self.refresh()

View File

@@ -1,5 +1,7 @@
import asyncio import asyncio
from rich.text import Text
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual.widgets import DataTable from textual.widgets import DataTable
@@ -18,13 +20,32 @@ async def test_table_clear() -> None:
table.add_columns("foo", "bar") table.add_columns("foo", "bar")
assert table.row_count == 0 assert table.row_count == 0
table.add_row("Hello", "World!") table.add_row("Hello", "World!")
assert [col.label for col in table.columns] == [Text("foo"), Text("bar")]
assert table.data == {0: ["Hello", "World!"]} assert table.data == {0: ["Hello", "World!"]}
assert table.row_count == 1 assert table.row_count == 1
table.clear() table.clear()
assert [col.label for col in table.columns] == [Text("foo"), Text("bar")]
assert table.data == {} assert table.data == {}
assert table.row_count == 0 assert table.row_count == 0
async def test_table_clear_with_columns() -> None:
"""Check DataTable.clear(columns=True)"""
app = TableApp()
async with app.run_test() as pilot:
table = app.query_one(DataTable)
table.add_columns("foo", "bar")
assert table.row_count == 0
table.add_row("Hello", "World!")
assert [col.label for col in table.columns] == [Text("foo"), Text("bar")]
assert table.data == {0: ["Hello", "World!"]}
assert table.row_count == 1
table.clear(columns=True)
assert [col.label for col in table.columns] == []
assert table.data == {}
assert table.row_count == 0
async def test_table_add_row() -> None: async def test_table_add_row() -> None:
app = TableApp() app = TableApp()