Программа чтения с экрана не может прочитать правильные записи списка в текстовом приложении PythonPython

Программы на Python
Ответить
Anonymous
 Программа чтения с экрана не может прочитать правильные записи списка в текстовом приложении Python

Сообщение Anonymous »

Я пытаюсь заставить текстовое приложение работать с espeakup, но столкнулся с очень странным поведением.
Это полностью рабочий пример

Код: Выделить всё

from textual.app import App, ComposeResult
from textual.containers import Vertical
from textual.geometry import Offset
from textual.widgets import OptionList, Label
from textual.containers import Center, Horizontal, ScrollableContainer, Vertical
from textual.screen import Screen

def out(text):
with open('out.txt', 'a') as f:
f.write(text + '\n')

class FruitScreen(Screen):
CSS = """
.header-text {
text-align: center;
width: 100%;
height: auto;

padding-top: 2;
padding-bottom: 2;

background: transparent;
}

.content-container {
width: 1fr;
height: 1fr;
max-height: 100%;

padding-top: 0;
padding-bottom: 3;
padding-left: 2;

background: transparent;
}

.list-container {
width: auto;
height: auto;
max-height: 100%;

background: transparent;
}

OptionList {
width: auto;
height: auto;
min-width: 15%;
max-height: 1fr;
border: none;

background: transparent;
}

OptionList > .option-list--option-highlighted {
background: blue;
color: white;
text-style: bold;
}
"""

def compose(self) -> None:
with Vertical(classes='content-container'):
yield Label('Header', classes='header-text', id='header_text')
yield OptionList(id='option_list_widget')

def on_mount(self) -> None:
self._update_options()

def _update_options(self) -> None:
option_list = self.query_one(OptionList)
option_list.clear_options()
option_list.add_options(['apple', 'banana', 'pear', 'cucumber', 'pineapple', 'broccoli', 'strawberry'])
self._set_cursor()

def on_option_list_selected(self) -> None:
self.app.exit()

def on_option_list_option_highlighted(self, event: OptionList.OptionHighlighted) -> None:
self._set_cursor()

def _set_cursor(self):
option_list = self.query_one(OptionList)
index = option_list.highlighted

out(f'HIGHTLIGHT: {index}')

if index is None:
return

target_y = option_list.region.y + index - option_list.scroll_offset.y
self.app.cursor_position = Offset(option_list.region.x, target_y)

out(f'INDEX: {index}')
out(f'TARGET: {target_y}')

class FruitApp(App):
def on_mount(self) -> None:
self.push_screen(FruitScreen())

if __name__ == '__main__':
app = FruitApp()
app.run()

Это отлично работает с espeakup, и правильная строка слышна.
Однако, когда я начинаю добавлять вложенные макеты для форматирования

Код: Выделить всё

    def compose(self) -> None:
with Vertical(classes='content-container'):
yield Label('Header', classes='header-text', id='header_text')

with Center():
with Vertical(classes='list-container'):
yield OptionList(id='option_list_widget')
вдруг кажется, что он читает не ту строку, кажется, что она отстает на 1 запись, независимо от того, перемещаетесь ли вы вверх или вниз.
Для приведенного выше примера это будет

Код: Выделить всё

apple    

Подробнее здесь: [url]https://stackoverflow.com/questions/79860696/screen-reader-fails-to-read-correct-list-entries-in-python-textual-app[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»