72

スクリプト用にグラフィカルなダイアログを作成したいのですが、方法がわかりません。GTK-Serverなどについて聞いたことがあります。誰かがBashをtcl/tkとリンクする方法を知っていれば、私も満足しています。

私のプロジェクトはBashのスクリプトでなければならないので、「changetoC++」のようなものを投稿しないでください。他のオプションはありません。

何か案は?

編集: 回答ありがとうございますが、コンソールの色のような「グラフィックス」は必要ありませんが、移動したり最小化したりできるグラフィックウィンドウを使用します。テストxmessageしますが、それが私が探しているものになるとは思いません。 。

編集2: はい/いいえのような単純なダイアログを作成したくありませんが、プログレスバーやボタンのようないくつかのインターフェイス、ゲームのようなものを作成します。

4

8 に答える 8

68

GUIダイアログを実際に使用する前に、コンソールプロンプトの使用を検討してください。多くの場合、単純な「y / n?」で逃げることができます。プロンプト。bashではreadコマンドを介して実行します。

read -p "Do something? ";
if [ $REPLY == "y" ]; then
    echo yay;
fi

コンソールプロンプトがうまくいかない場合、Zenityは本当に使いやすいです。例:

      zenity --error --text="Testing..."
      zenity --question --text="Continue?"

これはLinux/Gnomeでのみ機能します(つまり、このようなシステムにはデフォルトでのみインストールされます)。このread方法は、ほとんどすべてのプラットフォーム(ヘッドレスマシン、またはSSH経由を含む)で機能します。

readやZenityが提供するものよりも複雑なものが必要な場合は、「C ++への変更」が本当に最良の方法です(ただし、このようなシェルスクリプト置換タスクにはC++ではなくPython/ Rubyをお勧めします)

奇妙なゲームのためにシンプルなインターフェースを作りたいと思っています。健康のためのプログレスバーか何かが私が望むものの例です。変数「HEALTH」は34なので、プログレスバーを34/100で埋めます

コマンドラインスクリプトとして、Pythonを使用します。

$ export HEALTH=34
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))"
**********************************

または、1〜78の値を正規化するには(標準の端末サイズで行の折り返しが発生しないようにするため):

$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)"

Zenityには進行状況ダイアログもあります。

#!/bin/sh
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "20" ; sleep 1
echo "# Resetting cron jobs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "75" ; sleep 1
echo "# Rebooting system" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
  --title="Update System Logs" \
  --text="Scanning mail logs..." \
  --percentage=0

if [ "$?" = -1 ] ; then
        zenity --error \
          --text="Update canceled."
fi

前に述べたように、Zenityが必要なことを実行できない場合は、Python / Ruby / Perl / C ++などで「適切な」スクリプトとしてゲームを作成することを検討してください。これは、シェルの限界を押し広げているように聞こえます。 -スクリプトで実行できます。

于 2009-05-29T20:54:05.700 に答える
25

グラフィカルUIをbashで記述したい場合は、zenityが最適です。これはあなたがそれでできることです:

Application Options:
  --calendar                                     Display calendar dialog
  --entry                                        Display text entry dialog
  --error                                        Display error dialog
  --info                                         Display info dialog
  --file-selection                               Display file selection dialog
  --list                                         Display list dialog
  --notification                                 Display notification
  --progress                                     Display progress indication dialog
  --question                                     Display question dialog
  --warning                                      Display warning dialog
  --scale                                        Display scale dialog
  --text-info                                    Display text information dialog

これらのウィジェットを組み合わせることで、非常に使いやすいGUIを作成できます。もちろん、プログラミング言語に統合されたツールキットほど柔軟ではありませんが、場合によっては非常に便利です。

于 2009-05-29T21:07:57.747 に答える
16

dialogncursesライブラリを使用するというコマンドがあります。「ダイアログは、シェルスクリプトのダイアログボックスを使用して、さまざまな質問を表示したり、メッセージを表示したりできるプログラムです。これらのタイプのダイアログボックスが実装されています(すべてがダイアログにコンパイルされるとは限りません)。」

http://pwet.fr/man/linux/commandes/dialogを参照してください

于 2009-05-29T20:44:34.753 に答える
14

ご使用の環境でTcl/Tkを使用できる場合は、おそらくTCLスクリプトを作成して使用する必要があります。あなたも願いを見るかもしれません。

于 2009-05-29T20:46:13.173 に答える
11

ncursesベースのダイアログまたはスラングベースのホイップテールを使用できます。

どちらもGTKまたはTcl/Tkバインディングを持っていると思います。

于 2009-05-29T20:52:31.367 に答える
7

あなたはこれのためにgtk-serverをすることができます。Gtk-serverはバックグラウンドで実行されるプログラムであり、他のプログラム(bashスクリプトを含む)がそれを制御できるようにするテキストベースのインターフェイスを提供します。Bashの例がありますhttp://www.gtk-server.org/demo-ipc.bash.txt、http://www.gtk-server.org/demo-fifo.bash.txt

于 2009-05-30T06:25:50.067 に答える
7

私のライブラリを見てください: http ://sites.google.com/site/easybashgui

これは、同じコマンドセットを使用して、Xが実行されているかどうか、DEがKDEまたはGnomeなどであるかどうかに応じて、4つの大きなツール「kdialog」、「Xdialog」、「cdialog」、および「zenity」すべてを無差別に処理することを目的としています。15の異なる機能があります(その中には「進行」と「調整」と呼ばれる2つがあります)...

さよなら :-)

于 2010-05-27T06:50:11.653 に答える
4

Qt / KDEがインストールされている場合は、Qtダイアログウィンドウをポップアップするkdialogを使用できます。はい/いいえダイアログ、OK /キャンセル、簡単なテキスト入力、パスワード入力などを表示するように簡単に指定できます。その後、シェルでこれらのダイアログからの戻り値にアクセスできます。

于 2009-05-29T21:03:58.753 に答える