how to get the values of different forms in zenity

user573014 picture user573014 · Jan 26, 2014 · Viewed 10.9k times · Source

I want to get the values of the form in zenity (Ipaddress value written by user) in order to do some video streaming with ffmpeg, I tried several examples such as lists, forms, .. etc

zenity --forms --title="Add Friend" --text="Enter Multicast address" --separator="," --add-entry="IP address" --add-entry="PORT" 

OR

if zenity --list --title="Record Video Stream"  --text "Enter the Multicast IP address and port of each of the video stream" --column "Video IP" --print-column=2 --multiple --column "PORT" --editable ip="0.0.0.0" port="2002"

Answer

Petesh picture Petesh · Jan 26, 2014

The output from zenity is the text that was inputted, separated by the --separator character. The exit code is if it was accepted or not (i.e. OK, Cancel selected).

So for example (in bash):

OUTPUT=$(zenity --forms --title="Add Friend" --text="Enter Multicast address" --separator="," --add-entry="IP address" --add-entry="PORT")
accepted=$?
if ((accepted != 0)); then
    echo "something went wrong"
    exit 1
fi

ip=$(awk -F, '{print $1}' <<<$OUTPUT)
port=$(awk -F, '{print $2}' <<<$OUTPUT)

That gets you the ip address from zenity into the ip variable and the port from the zenity form into the port variable.

The second example is a little more complex, it's using the 'editable' template, which means that you don't get any output if the data is unchanged, but it follows a similar pattern to the previous example. Now, because you said --print-column=, it only displays that column in the output. Unfortunately, --list is for the selection of one or more rows from a list of items. Editing multiple rows will work, but you have to select every one of the rows to get the output from that row, even after making a change to the data. In this case, because you didn't specify the --separator option, the default separator is used |.

In the second case, using editable and list inputs isn't really what a list is designed to do from a user input perspective.