1414 from textual .widget import Widget
1515
1616
17+ _display_getter = attrgetter ("display" )
18+ _visible_getter = attrgetter ("visible" )
19+
20+
1721class DuplicateIds (Exception ):
1822 """Raised when attempting to add a widget with an id that already exists."""
1923
@@ -194,7 +198,7 @@ def displayed(self) -> Sequence[Widget]:
194198 if self ._displayed_nodes [0 ] != self ._updates :
195199 self ._displayed_nodes = (
196200 self ._updates ,
197- [ node for node in self ._nodes if node . display ] ,
201+ list ( filter ( _display_getter , self ._nodes )) ,
198202 )
199203 return self ._displayed_nodes [1 ]
200204
@@ -204,14 +208,14 @@ def displayed_and_visible(self) -> Sequence[Widget]:
204208 if self ._displayed_visible_nodes [0 ] != self ._updates :
205209 self ._displayed_nodes = (
206210 self ._updates ,
207- [ node for node in self .displayed if node . visible ] ,
211+ list ( filter ( _visible_getter , self .displayed )) ,
208212 )
209213 return self ._displayed_nodes [1 ]
210214
211215 @property
212216 def displayed_reverse (self ) -> Iterator [Widget ]:
213217 """Just the nodes where `display==True`, in reverse order."""
214- return reversed (self .displayed )
218+ return filter ( _display_getter , reversed (self ._nodes ) )
215219
216220 if TYPE_CHECKING :
217221
0 commit comments