Как взаимодействовать с окном zenity и набирать в нем текст?
У меня есть код Python:
import subprocess
subprocess.call(['sh', './zenity.sh'])
и файл zenity.sh, который
#!/usr/bin/python
zenity --forms --title="Question" \
--add-entry="Question" \
При его запуске открывается окно с полем для ввода текста.
Я хочу ввести текст внутри этого окна zenity, например, для xdotool, который я пытался использовать
subprocess.call(["xdotool", "type", "some text"])
не работает
затем я создал еще один .sh
#!/bin/bash
xdotool search --class zenity windowfocus type 'some text'
тоже не работает
Любые идеи?
2 ответа
Измените свой
zenity.shфайл с:
#!/usr/bin/python
zenity --forms --title="Question" \
--add-entry="Question" \
К:
#!/bin/bash
zenity --forms --title="Question" \
--add-entry="Question" \
Вы не звоните
zenityв скрипте Python. Вы вызываете его из команды bash/shell, поэтому ваш шебанг (первая строка) должен быть
#!/bin/bashнет
#!/usr/bin/python.
Есть два требования для работы с вашим примером:
- Вы должны использовать X11 , а не Wayland.
- Ваше окно создано
zenityдолжны быть полностью загружены доxdotoolкоманда выполняется.
Чтобы сделать это правильно, вам необходимо:
Загрузите окно в фоновом режиме (с
&) вот так:zenity --forms --title="Question" --add-entry="Question" &Дайте некоторое время, чтобы окно полностью загрузилось (с
sleep) вот так:sleep 1Получите идентификатор окна по имени следующим образом:
window="$(xdotool search --name 'Question')"Активируйте свое окно по ID (хранится в
$windowна шаге 3 выше) вот так:xdotool windowactivate "$window"Введите текст в окно следующим образом:
xdotool type 'some text'
Таким образом, окончательный сценарий будет выглядеть так:
#!/bin/bash
zenity --forms --title="Question" --add-entry="Question" &
sleep 1
window="$(xdotool search --name 'Question')"
xdotool windowactivate "$window"
xdotool type 'some text'