App crash with spamming keyboard input, when running in --dev mode and with a console attached
See original GitHub issuetextual, 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:
- Created a year ago
- Comments:6 (3 by maintainers)
Top 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 >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Thanks, managed to reproduce that.
Did we solve your problem?
Consider buying the Textualize developers a coffee to say thanks.
โ Textualize