39 lines
935 B
Python
39 lines
935 B
Python
|
from textual.app import App, ComposeResult
|
||
|
from textual.widgets import Input
|
||
|
|
||
|
from textual_autocomplete import AutoComplete
|
||
|
from textual_autocomplete._autocomplete import DropdownItem, TargetState
|
||
|
|
||
|
|
||
|
class DynamicDataApp(App[None]):
|
||
|
CSS = """
|
||
|
Input {
|
||
|
margin: 2 4;
|
||
|
}
|
||
|
"""
|
||
|
|
||
|
def compose(self) -> ComposeResult:
|
||
|
input_widget = Input()
|
||
|
yield input_widget
|
||
|
yield AutoComplete(input_widget, candidates=self.get_candidates)
|
||
|
|
||
|
def get_candidates(self, state: TargetState) -> list[DropdownItem]:
|
||
|
left = len(state.text)
|
||
|
return [
|
||
|
DropdownItem(item, prefix=f"{left:>2} ")
|
||
|
for item in [
|
||
|
"Apple",
|
||
|
"Banana",
|
||
|
"Cherry",
|
||
|
"Orange",
|
||
|
"Pineapple",
|
||
|
"Strawberry",
|
||
|
"Watermelon",
|
||
|
]
|
||
|
]
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
app = DynamicDataApp()
|
||
|
app.run()
|