如何与 zenity 窗口交互并在其中输入一些文本?

如何与 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'

也无法工作

有任何想法吗?

答案1

使用以下命令更改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 命令调用的,因此您的 shebang(第一行)一定#!/bin/bash不是#!/usr/bin/python

答案2

xdotool要使用您的示例,有两个要求:

  • 你应该跑步X11并不是韦兰
  • 在运行该命令之前,您创建的窗口zenity必须完全加载。xdotool

为了正确执行此操作,您需要:

  1. 在窗口中加载背景(与&)如下:

    zenity --forms --title="Question" --add-entry="Question" &
    
  2. 给窗口一些时间以完全加载(使用sleep),如下所示:

    sleep 1
    
  3. 通过名称获取窗口 ID,如下所示:

    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'

相关内容