单个 BASH shell 脚本中的 GTK 命令,可以吗?

单个 BASH shell 脚本中的 GTK 命令,可以吗?

有可能吗狂欢shell 脚本(单个文件)使用循环变量等执行禅意在其他计划中删除 zenity 并添加 GTK 功能?

如果是,那么是否也可以将 bash 命令、变量、循环(从 bash shell 脚本复制)添加到qt4 设计器

我问的是,是否有可能GTK 功能可以与 bash 命令结合使用在 bash shell 脚本中或者甚至使用 qt4 设计器执行 bash 命令。

我想摆脱 zenity(或 yad、kdialog)因为仅限于更高级的 Windows,并且仍然使用 bash shell 脚本中已经存在的所有其他 bash 函数,可以吗?

答案1

Python 中没有 GTK+ 函数那样的“GTK 命令”。GTK+ 是一个与多种语言绑定的库,但它没有可执行文件命令了解它提供的功能。您可以尝试通过一些外部命令来执行 GTK+ API 可以执行的部分操作:

  • zenity、yad 等用于显示对话框
  • xsel 或 xclip 访问剪贴板
  • wmctrl 用于控制应用程序窗口

但是绝大多数 GTK+ 功能无法通过命令访问。

答案2

贝壳只是命令解释器yad根据 POSIX 定义。Gtk 是一个库,旨在导入实际的编程语言。所以答案是否定的,您不能在 shell 脚本中使用完整的 Gtk 内容,只能使用允许的有限内容zenity

但是您可以使用 Python。它是一种脚本语言,但比 shell 更适合系统和编程。您可以通过 Python 中的子进程模块调用存储在或之类的位置的命令/bin/usr/bin我已经为我的 Gtk 应用程序做过很多次了。

例如,下面是我用于从 Python 脚本调用外部命令的标准函数:

def run_cmd(self, cmdlist):
    """ Reusable function for running external commands """
    new_env = dict(os.environ)
    new_env['LC_ALL'] = 'C'
    try:
        stdout = subprocess.check_output(cmdlist, env=new_env)
    except subprocess.CalledProcessError:
        pass
    else:
        if stdout:
            return stdout

下面是在我的xrandr-indicator用于从 Ubuntu 顶部面板切换屏幕分辨率;顾名思义,它在xrandr后台调用:

    self.run_cmd(['xrandr','--output',out,'--mode',mode]) 

至于 shell,您需要使用 -c 参数调用 shell。因此,类似下面的命令可以工作:

subprocess.Popen(['bash','-c', 'echo hello world'])

或者,考虑实现进程间通信。用 Python 制作 GUI,但让它通过以下方式与 shell 脚本进行通信命名管道或文件。

答案3

我知道这个帖子很老了,仍然有人在寻找答案,有一个名为对话框可能会有用。其文档是这里例如这里

答案4

我同意 @Sergiy 的观点,只使用 Python 是理想的。但我想到了一个更好的折衷方案。而不是像建议的那样从 Python 运行 Bash 代码。应该可以保留 Bash 代码,只从 Python 运行 GTK。就像这样:

exec 3> >(python3 &>/dev/null)

cat >&3 <<__CODE__
# python init gtk ...
__CODE__

# bash code ...
echo "..." >&3   # run a gtk command
# bash code ...

exec 3>&-

相关内容