Как взаимодействовать с окном 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команда выполняется.

Чтобы сделать это правильно, вам необходимо:

  1. Загрузите окно в фоновом режиме&) вот так:

            zenity --forms --title="Question" --add-entry="Question" &
    
  2. Дайте некоторое время, чтобы окно полностью загрузилось (с sleep) вот так:

            sleep 1
    
  3. Получите идентификатор окна по имени следующим образом:

            window="$(xdotool search --name 'Question')"
    
  4. Активируйте свое окно по ID (хранится в $windowна шаге 3 выше) вот так:

            xdotool windowactivate "$window"
    
  5. Введите текст в окно следующим образом:

            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'
Другие вопросы по тегам