You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/guide/queries.md
+11-2Lines changed: 11 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# DOM Queries
2
2
3
-
In the previous chapter we introduced the [DOM](../guide/CSS.md#the-dom) which is how Textual apps keep track of widgets. We saw how you can apply styles to the DOM with CSS [selectors](./CSS.md#selectors).
3
+
In the [CSS chapter](./CSS.md) we introduced the [DOM](../guide/CSS.md#the-dom) which is how Textual apps keep track of widgets. We saw how you can apply styles to the DOM with CSS [selectors](./CSS.md#selectors).
4
4
5
5
Selectors are a very useful idea and can do more than apply styles. We can also find widgets in Python code with selectors, and make updates to widgets in a simple expressive way. Let's look at how!
6
6
@@ -19,7 +19,7 @@ We could do this with the following line of code:
19
19
send_button =self.query_one("#send")
20
20
```
21
21
22
-
This will retrieve a widget with an ID of `send`, if there is exactly one.
22
+
This will retrieve the first widget discovered with an ID of `send`.
23
23
If there are no matching widgets, Textual will raise a [NoMatches][textual.css.query.NoMatches] exception.
24
24
25
25
You can also add a second parameter for the expected type, which will ensure that you get the type you are expecting.
@@ -41,6 +41,15 @@ For instance, the following would return a `Button` instance (assuming there is
41
41
my_button =self.query_one(Button)
42
42
```
43
43
44
+
`query_one` searches the DOM *below* the widget it is called on, so if you call `query_one` on a widget, it will only find widgets that are descendants of that widget.
45
+
46
+
If you wish to search the entire DOM, you should call `query_one` on the `App` or `Screen` instance.
47
+
48
+
```python
49
+
# Search the entire Screen for a widget with an ID of "send-email"
50
+
self.screen.query_one("#send-email")
51
+
```
52
+
44
53
## Making queries
45
54
46
55
Apps and widgets also have a [query][textual.dom.DOMNode.query] method which finds (or queries) widgets. This method returns a [DOMQuery][textual.css.query.DOMQuery] object which is a list-like container of widgets.
0 commit comments