Xdialog Απορία στην δημιουργία μενού

...IDE, compilers, κλπ

Συντονιστής: konnn

Xdialog Απορία στην δημιουργία μενού

Δημοσίευσηαπό spyroskaftanis » 21 Μάιος 2011, 21:05

Καλησπέρα!
Προσπαθώ να φτιάξω μια απλή εφαρμογή σε bash η οποία να εμφανίζει ένα μενού στο οποίο οι διαθέσημες επιλογές να ανοίγουν διάφορα αρχεία (φωτογραφίες κτλ)
Συγκεκριμένα υπάρχουν διαθέσιμες επιλογές για 3 νόμους της φυσικής οι οποίες θα οδηγούν η καθεμία σε άλλες επιλογές κτλ.
Δεν έχω πρόβλημα να φτιάξω την εφαρμογή σε περιβάλλον γραμμής εντολών, έχω όμως σε γραφικό περιβάλλον. Χρησιμοποιώ το Xdialog.
Tο πρόβλημα είναι ότι δεν μπορώ να δημιουργήσω περιπτώσεις για κάθε επιλογή του μενού.
(Αυτό το παράδειγμα είναι πιο απλουστευμένο από το κανονικό)
Κώδικας: Επιλογή όλων
#! /bin/bash
#Filename:Φυσική Β' λυκείου Κατεύθυνσης 1ο & 2ο κεφάλαιο

#welcome message

Xdialog --title "Φυσική Κατεύθυνσης Β'Λυκείου" \
--msgbox "Καλωσήρθατε! Σε αυτή την εφαρμογή θα βρείτε σημαντικές
πληροφορίες για το πρώτο κεφάλαιο της ύλης σας." 10 80


Xdialog --title "Επιλογές" \
--menu "Η εφαρμογή αυτή σας προσφέρει κάποιες \n\
επιλογές, ώστε να ανακαλύψετε τα πάντα\n\
για τα δύο πρώτα κεγάλαι της Φυσική Β'Λυκείου\n\
που αναφέρονται στα αέρια.\n\
Πάμε λοιπόν!\n\n\
Επέλεξε το τι θες να δεις:" 24 71 6 \
"Νόμος του Boyle" "Ισόθερμη Μεταβολή" \
"Νόμος του Charles" "Ισόχωρη Μεταβολή" \
"Νόμος του Gay-Lussac" "Ισοβαρής Μεταβολή" 2> /tmp/menu.tmp.$$


retval=$?
choice=`cat /tmp/menu.tmp.$$`
rm -f /tmp/menu.tmp.$$

case $retval in
0)
echo "$choice"
;;
1)
echo "Cancel pressed.";;
255)
echo "Box closed.";;
esac


Η θέση που μπορώ να δουλέψω για τις επιλογές είναι η θέση 0). Η θέση 1) λειτουργεί όταν πατήσουμε cancel στο μενού και η θέση 255) όταν πατήσουμε Χ.
1η σκέψη: Δοκίμασα στο 0) να βάλω αυτό:
Κώδικας: Επιλογή όλων
0)
if [ $choice == "Νόμος του Boyle" ]; then
echo "a"
fi
if [ $choice == "Νόμος του Charles" ]; then
echo "b"
fi
if [ $choice == "Νόμος του Gay-Lussac"]; then
echo "c"
fi

Δεν δούλεψε. Έλεγε too many arguments
2η σκέψη: Δοκίμασα να βάλω και άλλα νούμερα 0) 1) 2) 3) μάταια. Μόνο ότι ήταν στο 0) λαμβανόταν υπ' όψιν για τις επιλογές του μενού.
3η σκέψη. Δοκίμασα το read ορίζοντας μια νέα μεταβλητή (read a) και προσπάθησα να χρησιμοποιήσω αυτό με τον τρόπο της 1ης σκέψης, αλλά πάλι δεν δούλεψε... :wtf:

Όσοι έχετε ασχοληθεί...για ρίξτε ιδέες!!
(Χρησιμοποίησα αυτόν τον οδηγό http://xdialog.free.fr/ αλλά απλώς χρησιμοποιεί το $choice ως μεταβλητή. Δεν παίρνει περιπτώσεις :wtf: )
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: C/C++,Java, Bash, Android┃ Αγγλικά: Μέτρια (B2) | Γαλλικά: Λίγα (Β1)
Λειτουργικό σε Η/Υ ϰ μοντέλο: |ext4| Fedora 20 σε multirama notbook
Προδιαγραφές ⇛ CPU- Intel(R) Core(TM) 2 Duo @ 2.00GHz│ RAM 2GB │Intel Corporation Mobile GM965/GL960|
my personal blog: http://skaftanis.blogspot.com
my fedora blog : http://fedora-gr.blogspot.com/
My New Project: http://showmeyourcode.co.nf/
CEID upatras 3rd year student.
Άβαταρ μέλους
spyroskaftanis
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 538
Εγγραφή: 23 Φεβ 2009, 22:04
Τοποθεσία: Αργολίδα
Εκτύπωση

Re: Xdialog Απορία στην δημιουργία μενού

Δημοσίευσηαπό clepto » 21 Μάιος 2011, 21:20

εγώ μπορώ να σου δώσω ένα παράδειγμα με το Zenity και χρήση cases...γιατί το zenity έχω δουλέψει...
Κώδικας: Επιλογή όλων
input=$( zenity --height=$_height --width=$_width \
--title="Διαδίκτυο-Συνομιλία-Διαμοιρασμός" \
--list \
--checklist \
--column="Επιλογή" \
--column="#" \
--column="Νόμος" \
--column="Κεφάλαιο" \
"true" "1" "Νόμος του Boyle" "Ισόθερμη Μεταβολή" \
"true" "2" "Νόμος του Charles" "Ισόχωρη Μεταβολή" \
"true" "3" "Νόμος του Gay-Lussac" "Ισοβαρής Μεταβολή" \
--separator=";" )
if [ $? != 0 ]; then
mainmenu
else
#οκ
for i in $(echo $input | tr ";" "\n")
do
case $i in
1) τι θελεις να κανει με την πρωτη επιλογη;;
2) τι θελεις να κανει με την δευτερη;;
3) τι θελεις να κανει με την τριτη;;
*) mainmenu;;
esac
done
fi
}

αυτό που χρειάζεσαι εδώ είναι οι cases!θα σου λύσουν τα χέρια...αν θέλεις θα το ψάξω περισσότερο μετά γιατί θα βγω έξω τώρα!
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Xdialog Απορία στην δημιουργία μενού

Δημοσίευσηαπό spyroskaftanis » 21 Μάιος 2011, 21:35

Ευχαριστώ για την απάντηση!!
Μου το εξηγείς λίγο αυτό:
Κώδικας: Επιλογή όλων
for i in $(echo $input | tr ";" "\n")
do
case $i in
1) τι θελεις να κανει με την πρωτη επιλογη;;
2) τι θελεις να κανει με την δευτερη;;
3) τι θελεις να κανει με την τριτη;;
*) mainmenu;;
esac
done
fi
}
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: C/C++,Java, Bash, Android┃ Αγγλικά: Μέτρια (B2) | Γαλλικά: Λίγα (Β1)
Λειτουργικό σε Η/Υ ϰ μοντέλο: |ext4| Fedora 20 σε multirama notbook
Προδιαγραφές ⇛ CPU- Intel(R) Core(TM) 2 Duo @ 2.00GHz│ RAM 2GB │Intel Corporation Mobile GM965/GL960|
my personal blog: http://skaftanis.blogspot.com
my fedora blog : http://fedora-gr.blogspot.com/
My New Project: http://showmeyourcode.co.nf/
CEID upatras 3rd year student.
Άβαταρ μέλους
spyroskaftanis
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 538
Εγγραφή: 23 Φεβ 2009, 22:04
Τοποθεσία: Αργολίδα
Εκτύπωση

Re: Xdialog Απορία στην δημιουργία μενού

Δημοσίευσηαπό clepto » 22 Μάιος 2011, 11:56

με το
Κώδικας: Επιλογή όλων
echo $input


εμφανίζει το μενού που έχω φτιάξει με το zenity πιο πάνω

Κώδικας: Επιλογή όλων
input=$( zenity --height=$_height --width=$_width \
--title="Διαδίκτυο-Συνομιλία-Διαμοιρασμός" \
--list \
--checklist \
--column="Επιλογή" \
--column="#" \
--column="Νόμος" \
--column="Κεφάλαιο" \
"true" "1" "Νόμος του Boyle" "Ισόθερμη Μεταβολή" \
"true" "2" "Νόμος του Charles" "Ισόχωρη Μεταβολή" \
"true" "3" "Νόμος του Gay-Lussac" "Ισοβαρής Μεταβολή" \
--separator=";" )


αν παρατηρήσεις έχω βάλει τέσσερις στήλες στο μενού...η μια είναι με αριθμούς και κάθε αριθμός αντιστοιχεί σε μια απάντηση, οπότε ανάλογα με τι θα πατήσεις στο μενού εκτελεί και την αντίστοιχη εντολή που έχεις ορίσει...
Κώδικας: Επιλογή όλων
case $i in
1) τι θελεις να κανει με την πρωτη επιλογη;;
2) τι θελεις να κανει με την δευτερη;;
3) τι θελεις να κανει με την τριτη;;
*) mainmenu;;
esac


αν θέλεις να διαβάσεις για τον βρόχθο for, κοίτα εδώ στο κεφάλαιο 9! :)
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση


  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού