Comments (5)
Related issue:
I'm not suggesting this should be marked as duplicate, rather just trying to link this to the overarching issue.
from textual.
While the "scroll into view when activated" thing was a nice and easy one-liner; the TabbedContent.TabActivated
issue is a bit trickier at first glance. It's very deliberately not done in the code, most likely because of the Catch-22 of a change to TabbedContent.active
causing a change to Tabs.active
which does post a Tabs.Activated
, which in turn triggers TabbedContent._on_tabs_tab_activated
, which in turn assigns TabbedContent.active
, which would force the TabbedContent.active
watcher, which would...
Unless I'm missing the obvious (highly likely) this might take a bit more than one line to work around.
from textual.
Using the following code we can see that the "scroll tab into view" problem stems from Tabs
:
from textual import on
from textual.app import App, ComposeResult
from textual.containers import Vertical
from textual.widgets import TabbedContent, TabPane, Tabs, Tab, Label, Log, Rule
class TabbedContentActiveApp(App[None]):
BINDINGS = [
("c", "jump_tabbed_content"),
("t", "jump_tabs")
]
def compose(self) -> ComposeResult:
with Vertical() as container:
container.border_title = "TabbedContent version"
with TabbedContent():
for n in range(200):
with TabPane(f"Filler {n}", id=f"filler-{n}"):
yield Label(f"Filler tab {n}")
with TabPane("PICK ME!", id="pick-me"):
yield Label("This is the tab we're after")
with Vertical() as container:
container.border_title = "Tabs version"
yield Tabs(
*(
tuple(Tab(f"Filler {n}", id=f"filler-{n}") for n in range(200)) +
(Tab("PICK ME!", id="pick-me"),)
)
)
yield Rule()
yield Log()
@on(TabbedContent.TabActivated)
@on(Tabs.TabActivated)
def log_messages(self, event: TabbedContent.TabActivated | Tabs.TabActivated) -> None:
self.query_one(Log).write_line(f"{event!r}")
def action_jump_tabbed_content(self) -> None:
self.query_one(TabbedContent).active = "pick-me"
def action_jump_tabs(self) -> None:
self.query_one("Vertical > Tabs", Tabs).active = "pick-me"
if __name__ == "__main__":
TabbedContentActiveApp().run()
We can also see that Tabs
does post the relevant message when active
is set, so most likely TabbedContent
isn't handling that situation correctly.
from textual.
@davep - that makes sense. My main issue was actually the active tab not coming into view which you've fixed :) Thank you!
from textual.
Don't forget to star the repository!
Follow @textualizeio for Textual updates.
from textual.
Related Issues (20)
- Discord invite link not working HOT 6
- Malformed @click links crash Textual application HOT 4
- How to link from docs to videos? HOT 2
- Loading Indicator page could use docs about `loading` attribute HOT 1
- Ability to replace text while keeping TextArea history HOT 7
- NoMatches error occurring when changing screens quickly in version 0.49+ HOT 14
- Hidden ListItem in ListView is selected when navigating with keyboard
- `Switch.action_toggle` name clash HOT 1
- Input and TextArea have cursor blinking even though terminal window is not focused HOT 8
- Intermittently failing test (`test_pilot.py::test_pilot_target_on_widget_that_is_not_visible_errors`) HOT 3
- Add indicators for the TabbedContent widget HOT 6
- Scrollbars may trap the mouse if hidden while the user is scrolling HOT 6
- TextArea CTRL-k behavior request HOT 7
- Try/except on all app
- Exception not being raised in tests HOT 4
- `DataTable` scrolling issues with `max-height: 100vh` HOT 4
- Include default CSS in docs? HOT 1
- Hiding a `TextArea` while mouse-based selection is happening can trap the cursor HOT 1
- Different behaviour between CSS and CSS_PATH of Screen HOT 6
- `Placeholder` has no `disabled` `__init__` keyword parameter HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from textual.