• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

KDialog auch mit mehreren Feldern möglich?

gorgonz

Hacker
Würde gerne ein kleines Skript für einen kdialog schreiben, der ein Eingabefeld enthalten soll und einen Progressbar, um die laufende Bearbeitung im Skript sichtbar zu machen.

Vielleicht habe ich nur die Denke nicht verstanden, für mich wirkt es so, als könnte ich immer nur elementare Dialogtypen wählen, diese dann aber nicht erweitern, also

kdialog --progressbar ... kein Problem, aber ich kann keine textbox mehr dazu tun, oder?

Danke schon mal vorab :)
 
Hallo gorgonz,

gorgonz schrieb:
kdialog --progressbar ... kein Problem, aber ich kann keine textbox mehr dazu tun, oder?
Warum nicht so?:

Code:
kdialog --progressbar "Bitte warten ..." 1..100

Oder so ähnlich:

Code:
KOMMANDO | kdialog --progressbar "Bitte warten ..." 1..100 | Kommando auf das gewartet werden soll

Lieben Gruß aus Hessen
 
OP
G

gorgonz

Hacker
Liebes Herz-von-Hessen,

danke erstmal für Deine Antwort ;-). Es wird mir nicht helfen. Ich fürchte, ich hab es nicht genau beschrieben.

Was ich erreichen will ist, daß ich vom Benutzer eine Eingabe bekomme (das Textfeld), und dann im Skript damit das Arbeiten anfange. In bestimmten Abständen will ich den Fortschritt melden, bis ich fertig bin. Also nur eine Eingabe und dann immer wieder eine Ausgabe des Fortschritts im gleichen Dialog.

Deine Lösung erlaubt noch nicht, daß ich eine Eingabe vom Benutzer erhalte ;-).

Ich habe aber langsam selbst die Befürchtung, daß das garnicht geht, oder? Wahrscheinlich kann es nur gelöst werden, indem ich 2 Dialoge benutze, was ich eigentlich vermeiden wollte.
 
OP
G

gorgonz

Hacker
Hey Faxxon,

ich hatte noch nie davon gehört, das sieht gut aus!. Habs gleich mal installiert (ist im Packman Repo dabei)

Ja, das seh ich mir näher an, vielen Dank :)
 

abgdf

Guru
Diese Tools sind 'eh alles Krücken. Wenn Du Wünsche hast, die über 08/15 hinausgehen, wirst Du das in einer vernünftigen Sprache schreiben müssen, z.B. in Python/PyQt.
 
Hallo Faxxon,

Faxxon schrieb:
Sieh Dir mal yad an, das ist umfangreicher als kdialog.
Naja, man kann dann auch das erprobte Zenity verwenden, aber ich würde es nicht unbedingt als umfangreicher bezeichen.

@abgdf
abgdf schrieb:
Diese Tools sind 'eh alles Krücken. Wenn Du Wünsche hast, die über 08/15 hinausgehen, wirst Du das in einer vernünftigen Sprache schreiben müssen, z.B. in Python/PyQt.
Naja man kann ja auch erstmal mit QT oder GTK beginnen.

Lieben Gruß aus Hessen
 

abgdf

Guru
Herz-von-Hessen schrieb:
Naja man kann ja auch erstmal mit QT oder GTK beginnen.
?? Qt und Gtk sind in C++. Das wäre ja viel schwieriger als PyQt (das ist eine Brücke von Python zu Qt, so daß man Qt damit in Python statt in C++ programmieren kann).
 
Hallo gorgonz,

gorgonz schrieb:
Was ich erreichen will ist, daß ich vom Benutzer eine Eingabe bekomme (das Textfeld), und dann im Skript damit das Arbeiten anfange. In bestimmten Abständen will ich den Fortschritt melden, bis ich fertig bin. Also nur eine Eingabe und dann immer wieder eine Ausgabe des Fortschritts im gleichen Dialog.

  • Wie soll die Eingabe verarbeitet werden wenn der Eingabedialog geöffnet ist?
  • Weshalb sollte der Eingabedialog geöffnet bleiben?

gorgonz schrieb:
Deine Lösung erlaubt noch nicht, daß ich eine Eingabe vom Benutzer erhalte ;-).
Schau mal hier:
http://forum.ubuntuusers.de/topic/kdialog-progressbar/

gorgonz schrieb:
Ich habe aber langsam selbst die Befürchtung, daß das garnicht geht, oder? Wahrscheinlich kann es nur gelöst werden, indem ich 2 Dialoge benutze, was ich eigentlich vermeiden wollte.
Du könntest mal genau erklären was das Ziel ist, eventuell findet sich dann eine Lösung.

Lieben Gruß aus Hessen
 
OP
G

gorgonz

Hacker
So, war weg übers WE, daher hat es jetzt etwas gedauert. Also, ich hab mit yad jetzt die gleiche Erfahrung gemacht:
- Eingabefeld anzeigen und auswerten alleine geht
- progresbar alleine geht

Aber ich krieg die beiden Sachen nicht in den gleichen Dlg.

Wozu will ich das?

Das mit den 2 Dialogen wirkt eher irritierend. Hab das gemerkt, als ich in einem anderen Zusammenhang auch schon mal etwas Ähnliches für jemand gemacht hatte. Und mir selbst geht es auch so ;). Ich würde den Dialog gerne erst dann schließen lassen, wenn "die Arbeit" gemacht ist, heißt:
- nach der Eingabe wird ein Return oder ein OK-Button gedrückt und der Dialog bleibt stehen.
- Jetzt wird der Progressbar mit Fortschrittswerten befeuert, bis die 100% erreicht sind.

Aber Du hast recht, Herz-von-Hessen
Wie soll die Eingabe verarbeitet werden wenn der Eingabedialog geöffnet ist?

Das stimmt natürlich. Der KDialog/yad Ansatz passt nicht zu dem, was ich erreichen will. Ursache ist, daß ja "im" Dialog keine Verarbeitung gemacht wird, sondern erst wieder im Skript.

Das ist ein prinzipieller Unterschied zu einem KDE "Programm", bei denen Events abgearbeitet werden können, während der Dialog noch da steht.
=> Ich hatte die Denke tatsächlich nicht verstanden bzw. konsequent durchgedacht ;-)

Conclusion:
Ich kehre zur shell zurück und verwende einen Aufrufparameter. Im Skript kann ich dann eine Progress-Anzeige aufrufen, die nichts weiter tut, als den Fortschritt zeigen. Damit sind die beiden Dinge wieder getrennt voneinander.

Es ist dann allerdings sinnvoll für mich, den Fortschritt nicht mehr als losgelösten Dlg zu zeigen, sondern ebenfalls innerhalb der shell - z.B. als "Rautenfortschritt".

Trotz allem vielen Dank für die Unterstützung. Durch Eure Beiträge konnte ich erst meinen Denkfehler erkennen :)
 

susejunky

Moderator
Teammitglied
Hallo gorgonz,

gorgonz schrieb:
... Ursache ist, daß ja "im" Dialog keine Verarbeitung gemacht wird, sondern erst wieder im Skript.
das ist zwar grundsätzlich richtig, aber man kann ein Fortschrittsfenster "in der Anzeige stehen lassen" und trotzdem im Script weiter arbeiten:

Code:
#!/bin/sh

AnzahlArbeitsbloecke=3

# Öffnet den Fortschrittsdialog
dbusRef=$(kdialog --title "Programmname" --caption "Fortschritt" --progressbar "Die Arbeit beginnt ..." $AnzahlArbeitsbloecke)
sleep 1

# Arbeitsblock eins
echo "Verarbeitungsschritt eins"
echo "Verarbeitungsschritt zwei"
sleep 2

# Fortschrittsanzeige aktualisieren
qdbus $dbusRef Set org.kde.kdialog.ProgressDialog value 1
qdbus $dbusRef setLabelText "Schritte 1+2 erledigt"

# Arbeitsblock zwei
echo "Verarbeitungsschritt drei"
echo "Verarbeitungsschritt vier"
sleep 2

# Fortschrittsanzeige aktualisieren
qdbus $dbusRef Set org.kde.kdialog.ProgressDialog value 2
qdbus $dbusRef setLabelText "Schritte 3+4 erledigt"

# Arbeitsblock drei
echo "Verarbeitungsschritt fünf"
echo "Verarbeitungsschritt sechs"
sleep 2

# Fortschrittsanzeige aktualisieren
qdbus $dbusRef Set org.kde.kdialog.ProgressDialog value 3
qdbus $dbusRef setLabelText "Schritte 5+6 erledigt"
sleep 2

# Fortschrittsanzeige aktualisieren
qdbus $dbusRef setLabelText "Fertig."
sleep 1
qdbus $dbusRef org.kde.kdialog.ProgressDialog.close

#Verarbeitung abgeschlossen
Die Befehle in den Bereichen "# Arbeitsblock n" stehen stellvertretend für irgendwelche Programmabläufe.

Vielleicht kommt das Deiner Vorstellung näher, als ein reiner Shell-Dialog.

Viele Grüße

susejunky.
 
Oben