question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. Itย collects links to all the places you might be looking at while hunting down a tough bug.

And, if youโ€™re still stuck at the end, weโ€™re happy to hop on a call to see how we can help out.

App crash with spamming keyboard input, when running in --dev mode and with a console attached

See original GitHub issue

textual, version 0.1.15 โ€“ css branch, macOS

While evaluating the css branch, and working through the upcoming docs, I was looking at the section regarding running an application in --dev mode, with a textual console attached. Testing this with the stopwatch.py example, I started rapidly hitting the A and R keys to generate lots of output in the console. Quite quickly I got a number of instances of the terminal bell ringing followed by a crash:

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:1832 in _on_mount                                                                                          โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   1829 โ”‚                                                                                                                                                   โ”‚
โ”‚   1830 โ”‚   def _on_mount(self, event: events.Mount) -> None:                                                                                               โ”‚
โ”‚   1831 โ”‚   โ”‚   widgets = self.compose()                                                                                                                    โ”‚
โ”‚ โฑ 1832 โ”‚   โ”‚   self.mount(*widgets)                                                                                                                        โ”‚
โ”‚   1833 โ”‚   โ”‚   # Preset scrollbars if not automatic                                                                                                        โ”‚
โ”‚   1834 โ”‚   โ”‚   if self.styles.overflow_y == "scroll":                                                                                                      โ”‚
โ”‚   1835 โ”‚   โ”‚   โ”‚   self.show_vertical_scrollbar = True                                                                                                     โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                          โ”‚
โ”‚ โ”‚   event = Mount()                                             โ”‚                                                                                          โ”‚
โ”‚ โ”‚    self = Stopwatch()                                         โ”‚                                                                                          โ”‚
โ”‚ โ”‚ widgets = <generator object Stopwatch.compose at 0x1039b7ca0> โ”‚                                                                                          โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                          โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:326 in mount                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚    323 โ”‚   โ”‚                                                                                                                                               โ”‚
โ”‚    324 โ”‚   โ”‚   """                                                                                                                                         โ”‚
โ”‚    325 โ”‚   โ”‚   self.app._register(self, *anon_widgets, **widgets)                                                                                          โ”‚
โ”‚ โฑ  326 โ”‚   โ”‚   self.screen.refresh(layout=True)                                                                                                            โ”‚
โ”‚    327 โ”‚                                                                                                                                                   โ”‚
โ”‚    328 โ”‚   def compose(self) -> ComposeResult:                                                                                                             โ”‚
โ”‚    329 โ”‚   โ”‚   """Called by Textual to create child widgets.                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                          โ”‚
โ”‚ โ”‚ anon_widgets = (Button(id='start', variant='success'), Button(id='stop', variant='error'), Button(id='reset'), TimeDisplay()) โ”‚                          โ”‚
โ”‚ โ”‚         self = Stopwatch()                                                                                                    โ”‚                          โ”‚
โ”‚ โ”‚      widgets = {}                                                                                                             โ”‚                          โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                          โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/dom.py:269 in screen                                                                                                 โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   266 โ”‚   โ”‚   while node and not isinstance(node, Screen):                                     โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                โ”‚
โ”‚   267 โ”‚   โ”‚   โ”‚   node = node._parent                                                          โ”‚   node = None                            โ”‚                โ”‚
โ”‚   268 โ”‚   โ”‚   if not isinstance(node, Screen):                                                 โ”‚ Screen = <class 'textual.screen.Screen'> โ”‚                โ”‚
โ”‚ โฑ 269 โ”‚   โ”‚   โ”‚   raise NoScreen(f"{self} has no screen")                                      โ”‚   self = Stopwatch()                     โ”‚                โ”‚
โ”‚   270 โ”‚   โ”‚   return node                                                                      โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                โ”‚
โ”‚   271 โ”‚                                                                                                                                                    โ”‚
โ”‚   272 โ”‚   @property                                                                                                                                        โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
NoScreen: Stopwatch() has no screen
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:1832 in _on_mount                                                                                          โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   1829 โ”‚                                                                                                                                                   โ”‚
โ”‚   1830 โ”‚   def _on_mount(self, event: events.Mount) -> None:                                                                                               โ”‚
โ”‚   1831 โ”‚   โ”‚   widgets = self.compose()                                                                                                                    โ”‚
โ”‚ โฑ 1832 โ”‚   โ”‚   self.mount(*widgets)                                                                                                                        โ”‚
โ”‚   1833 โ”‚   โ”‚   # Preset scrollbars if not automatic                                                                                                        โ”‚
โ”‚   1834 โ”‚   โ”‚   if self.styles.overflow_y == "scroll":                                                                                                      โ”‚
โ”‚   1835 โ”‚   โ”‚   โ”‚   self.show_vertical_scrollbar = True                                                                                                     โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                  โ”‚
โ”‚ โ”‚   event = Mount()                                                     โ”‚                                                                                  โ”‚
โ”‚ โ”‚    self = Button(id='start', classes={'-success'}, variant='success') โ”‚                                                                                  โ”‚
โ”‚ โ”‚ widgets = <generator object Widget.compose at 0x103a3daf0>            โ”‚                                                                                  โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                  โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:326 in mount                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚    323 โ”‚   โ”‚                                                                                                                                               โ”‚
โ”‚    324 โ”‚   โ”‚   """                                                                                                                                         โ”‚
โ”‚    325 โ”‚   โ”‚   self.app._register(self, *anon_widgets, **widgets)                                                                                          โ”‚
โ”‚ โฑ  326 โ”‚   โ”‚   self.screen.refresh(layout=True)                                                                                                            โ”‚
โ”‚    327 โ”‚                                                                                                                                                   โ”‚
โ”‚    328 โ”‚   def compose(self) -> ComposeResult:                                                                                                             โ”‚
โ”‚    329 โ”‚   โ”‚   """Called by Textual to create child widgets.                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                             โ”‚
โ”‚ โ”‚ anon_widgets = ()                                                          โ”‚                                                                             โ”‚
โ”‚ โ”‚         self = Button(id='start', classes={'-success'}, variant='success') โ”‚                                                                             โ”‚
โ”‚ โ”‚      widgets = {}                                                          โ”‚                                                                             โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                             โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/dom.py:269 in screen                                                                                                 โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   266 โ”‚   โ”‚   while node and not isinstance(node, Screen):                                                                                                 โ”‚
โ”‚   267 โ”‚   โ”‚   โ”‚   node = node._parent                                                                                                                      โ”‚
โ”‚   268 โ”‚   โ”‚   if not isinstance(node, Screen):                                                                                                             โ”‚
โ”‚ โฑ 269 โ”‚   โ”‚   โ”‚   raise NoScreen(f"{self} has no screen")                                                                                                  โ”‚
โ”‚   270 โ”‚   โ”‚   return node                                                                                                                                  โ”‚
โ”‚   271 โ”‚                                                                                                                                                    โ”‚
โ”‚   272 โ”‚   @property                                                                                                                                        โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                   โ”‚
โ”‚ โ”‚   node = None                                                        โ”‚                                                                                   โ”‚
โ”‚ โ”‚ Screen = <class 'textual.screen.Screen'>                             โ”‚                                                                                   โ”‚
โ”‚ โ”‚   self = Button(id='start', classes={'-success'}, variant='success') โ”‚                                                                                   โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
NoScreen: Button(id='start', classes={'-success'}, variant='success') has no screen
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:1832 in _on_mount                                                                                          โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   1829 โ”‚                                                                                                                                                   โ”‚
โ”‚   1830 โ”‚   def _on_mount(self, event: events.Mount) -> None:                                                                                               โ”‚
โ”‚   1831 โ”‚   โ”‚   widgets = self.compose()                                                                                                                    โ”‚
โ”‚ โฑ 1832 โ”‚   โ”‚   self.mount(*widgets)                                                                                                                        โ”‚
โ”‚   1833 โ”‚   โ”‚   # Preset scrollbars if not automatic                                                                                                        โ”‚
โ”‚   1834 โ”‚   โ”‚   if self.styles.overflow_y == "scroll":                                                                                                      โ”‚
โ”‚   1835 โ”‚   โ”‚   โ”‚   self.show_vertical_scrollbar = True                                                                                                     โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                       โ”‚
โ”‚ โ”‚   event = Mount()                                                โ”‚                                                                                       โ”‚
โ”‚ โ”‚    self = Button(id='stop', classes={'-error'}, variant='error') โ”‚                                                                                       โ”‚
โ”‚ โ”‚ widgets = <generator object Widget.compose at 0x103a3da80>       โ”‚                                                                                       โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                       โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:326 in mount                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚    323 โ”‚   โ”‚                                                                                                                                               โ”‚
โ”‚    324 โ”‚   โ”‚   """                                                                                                                                         โ”‚
โ”‚    325 โ”‚   โ”‚   self.app._register(self, *anon_widgets, **widgets)                                                                                          โ”‚
โ”‚ โฑ  326 โ”‚   โ”‚   self.screen.refresh(layout=True)                                                                                                            โ”‚
โ”‚    327 โ”‚                                                                                                                                                   โ”‚
โ”‚    328 โ”‚   def compose(self) -> ComposeResult:                                                                                                             โ”‚
โ”‚    329 โ”‚   โ”‚   """Called by Textual to create child widgets.                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                  โ”‚
โ”‚ โ”‚ anon_widgets = ()                                                     โ”‚                                                                                  โ”‚
โ”‚ โ”‚         self = Button(id='stop', classes={'-error'}, variant='error') โ”‚                                                                                  โ”‚
โ”‚ โ”‚      widgets = {}                                                     โ”‚                                                                                  โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                  โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/dom.py:269 in screen                                                                                                 โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   266 โ”‚   โ”‚   while node and not isinstance(node, Screen):                                                                                                 โ”‚
โ”‚   267 โ”‚   โ”‚   โ”‚   node = node._parent                                                                                                                      โ”‚
โ”‚   268 โ”‚   โ”‚   if not isinstance(node, Screen):                                                                                                             โ”‚
โ”‚ โฑ 269 โ”‚   โ”‚   โ”‚   raise NoScreen(f"{self} has no screen")                                                                                                  โ”‚
โ”‚   270 โ”‚   โ”‚   return node                                                                                                                                  โ”‚
โ”‚   271 โ”‚                                                                                                                                                    โ”‚
โ”‚   272 โ”‚   @property                                                                                                                                        โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                        โ”‚
โ”‚ โ”‚   node = None                                                   โ”‚                                                                                        โ”‚
โ”‚ โ”‚ Screen = <class 'textual.screen.Screen'>                        โ”‚                                                                                        โ”‚
โ”‚ โ”‚   self = Button(id='stop', classes={'-error'}, variant='error') โ”‚                                                                                        โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                        โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
NoScreen: Button(id='stop', classes={'-error'}, variant='error') has no screen
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:1832 in _on_mount                                                                                          โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   1829 โ”‚                                                                                                                                                   โ”‚
โ”‚   1830 โ”‚   def _on_mount(self, event: events.Mount) -> None:                                                                                               โ”‚
โ”‚   1831 โ”‚   โ”‚   widgets = self.compose()                                                                                                                    โ”‚
โ”‚ โฑ 1832 โ”‚   โ”‚   self.mount(*widgets)                                                                                                                        โ”‚
โ”‚   1833 โ”‚   โ”‚   # Preset scrollbars if not automatic                                                                                                        โ”‚
โ”‚   1834 โ”‚   โ”‚   if self.styles.overflow_y == "scroll":                                                                                                      โ”‚
โ”‚   1835 โ”‚   โ”‚   โ”‚   self.show_vertical_scrollbar = True                                                                                                     โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                             โ”‚
โ”‚ โ”‚   event = Mount()                                          โ”‚                                                                                             โ”‚
โ”‚ โ”‚    self = Button(id='reset', classes={'-default'})         โ”‚                                                                                             โ”‚
โ”‚ โ”‚ widgets = <generator object Widget.compose at 0x103a3d8c0> โ”‚                                                                                             โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                             โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:326 in mount                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚    323 โ”‚   โ”‚                                                                                                                                               โ”‚
โ”‚    324 โ”‚   โ”‚   """                                                                                                                                         โ”‚
โ”‚    325 โ”‚   โ”‚   self.app._register(self, *anon_widgets, **widgets)                                                                                          โ”‚
โ”‚ โฑ  326 โ”‚   โ”‚   self.screen.refresh(layout=True)                                                                                                            โ”‚
โ”‚    327 โ”‚                                                                                                                                                   โ”‚
โ”‚    328 โ”‚   def compose(self) -> ComposeResult:                                                                                                             โ”‚
โ”‚    329 โ”‚   โ”‚   """Called by Textual to create child widgets.                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                                โ”‚
โ”‚ โ”‚ anon_widgets = ()                                       โ”‚                                                                                                โ”‚
โ”‚ โ”‚         self = Button(id='reset', classes={'-default'}) โ”‚                                                                                                โ”‚
โ”‚ โ”‚      widgets = {}                                       โ”‚                                                                                                โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                                โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/dom.py:269 in screen                                                                                                 โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   266 โ”‚   โ”‚   while node and not isinstance(node, Screen):                                     โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ       โ”‚
โ”‚   267 โ”‚   โ”‚   โ”‚   node = node._parent                                                          โ”‚   node = None                                     โ”‚       โ”‚
โ”‚   268 โ”‚   โ”‚   if not isinstance(node, Screen):                                                 โ”‚ Screen = <class 'textual.screen.Screen'>          โ”‚       โ”‚
โ”‚ โฑ 269 โ”‚   โ”‚   โ”‚   raise NoScreen(f"{self} has no screen")                                      โ”‚   self = Button(id='reset', classes={'-default'}) โ”‚       โ”‚
โ”‚   270 โ”‚   โ”‚   return node                                                                      โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ       โ”‚
โ”‚   271 โ”‚                                                                                                                                                    โ”‚
โ”‚   272 โ”‚   @property                                                                                                                                        โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
NoScreen: Button(id='reset', classes={'-default'}) has no screen
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:1832 in _on_mount                                                                                          โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   1829 โ”‚                                                                                                                                                   โ”‚
โ”‚   1830 โ”‚   def _on_mount(self, event: events.Mount) -> None:                                                                                               โ”‚
โ”‚   1831 โ”‚   โ”‚   widgets = self.compose()                                                                                                                    โ”‚
โ”‚ โฑ 1832 โ”‚   โ”‚   self.mount(*widgets)                                                                                                                        โ”‚
โ”‚   1833 โ”‚   โ”‚   # Preset scrollbars if not automatic                                                                                                        โ”‚
โ”‚   1834 โ”‚   โ”‚   if self.styles.overflow_y == "scroll":                                                                                                      โ”‚
โ”‚   1835 โ”‚   โ”‚   โ”‚   self.show_vertical_scrollbar = True                                                                                                     โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                             โ”‚
โ”‚ โ”‚   event = Mount()                                          โ”‚                                                                                             โ”‚
โ”‚ โ”‚    self = TimeDisplay()                                    โ”‚                                                                                             โ”‚
โ”‚ โ”‚ widgets = <generator object Widget.compose at 0x103a3c970> โ”‚                                                                                             โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                             โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/widget.py:326 in mount                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚    323 โ”‚   โ”‚                                                                                    โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                           โ”‚
โ”‚    324 โ”‚   โ”‚   """                                                                              โ”‚ anon_widgets = ()            โ”‚                           โ”‚
โ”‚    325 โ”‚   โ”‚   self.app._register(self, *anon_widgets, **widgets)                               โ”‚         self = TimeDisplay() โ”‚                           โ”‚
โ”‚ โฑ  326 โ”‚   โ”‚   self.screen.refresh(layout=True)                                                 โ”‚      widgets = {}            โ”‚                           โ”‚
โ”‚    327 โ”‚                                                                                        โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                           โ”‚
โ”‚    328 โ”‚   def compose(self) -> ComposeResult:                                                                                                             โ”‚
โ”‚    329 โ”‚   โ”‚   """Called by Textual to create child widgets.                                                                                               โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚ /Users/davep/temp/textual/src/textual/dom.py:269 in screen                                                                                                 โ”‚
โ”‚                                                                                                                                                            โ”‚
โ”‚   266 โ”‚   โ”‚   while node and not isinstance(node, Screen):                                     โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                โ”‚
โ”‚   267 โ”‚   โ”‚   โ”‚   node = node._parent                                                          โ”‚   node = None                            โ”‚                โ”‚
โ”‚   268 โ”‚   โ”‚   if not isinstance(node, Screen):                                                 โ”‚ Screen = <class 'textual.screen.Screen'> โ”‚                โ”‚
โ”‚ โฑ 269 โ”‚   โ”‚   โ”‚   raise NoScreen(f"{self} has no screen")                                      โ”‚   self = TimeDisplay()                   โ”‚                โ”‚
โ”‚   270 โ”‚   โ”‚   return node                                                                      โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                โ”‚
โ”‚   271 โ”‚                                                                                                                                                    โ”‚
โ”‚   272 โ”‚   @property                                                                                                                                        โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
NoScreen: TimeDisplay() has no screen

Doing the same thing, with the console not running, the app ran fine and I could spam the add and remove keys as much as I liked without incident.

Issue Analytics

  • State:closed
  • Created a year ago
  • Comments:6 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
willmcgugancommented, Oct 3, 2022

Thanks, managed to reproduce that.

0reactions
github-actions[bot]commented, Oct 20, 2022

Did we solve your problem?

Consider buying the Textualize developers a coffee to say thanks.

โ€“ Textualize

Read more comments on GitHub >

github_iconTop Results From Across the Web

Applications crash upon keyboard input - Microsoft Community
Hi Dylan, it may be a keyboard driver related issue, please try this: Open Device Manager (accessible by right clicking your Start Button)...
Read more >
Keyboard cause crash Xcode 13 beta 5, iOS 15
Hello, my app is crashing when I click on the keyboard, I select my textfield, ... Im running the app on my iPhone...
Read more >
Input System bugs - Unity Forum
Hi, I've been trying the new input system and so far I really like it! ... working regardless of whether a keyboard or...
Read more >
C# ReadKey crashing console app when called using <nul
Write("\b \b"); after the ReadKey method, it works. Weird thing is, when I copy the application to my desktop, it doesn't wait for...
Read more >
Sudden Crashes on Keyboard Input and File Download
A character is inserted, or the file is downloaded. Either way, a browser crash is unexpected. What happens instead? The browser crashes. In...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found