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

dringende Frage

Hi ich bin neu hier im Forum. Ich mache gerade eine schulische ausbildung zum technischen assistenten für Informatik. Jetzt will mein Lehrer, am Dienstag das wir ne Aufgabe machen können, und die dann benotet wird. Und zwar soll in diesen "Programm" ein Fortschrittsbalken in Prozent angezeigt werden. Der alle 5 Sekunden aktualisiert werden soll und nach 30 Sekunden voll ist und sich das "Programm" dann von selber schließt. So dass die normale eingabe über die Konsole wieder möglich ist.

Der Code den wir in der letzten Stunde hatten:


#! /bin/bash

dialog --backtitle "Die Adresseingabe" \
-- title "Adresseingabe" \
-- menu "Wählen Sie Ihre Eingabeform" 13 60 6 \
1 "als Formular" \
2 "als Dialog-Fenster-Folge" \
3 "Exit" 2> ./tempfile$$

if [[ $? !="0" ]]
then
echo "Warum brichst Du hier ab - ich würde das nicht tun!"
fi
output = `cat ./tempfile$$`
dialog --msgbox "Dies ist der Text:\n$output" 20 60
dialog --gauge "$output" 20
clear

Ich hab schon selbst nach einer Lösung gesucht aber nichts gefunden.
Bitte um Hilfe
 

abgdf

Guru
Guckstu:
Code:
#!/usr/bin/env python

import Tkinter
import tkMessageBox

class MainWindow:

    def __init__(self):

        self.mw = Tkinter.Tk()
        self.mw.title("Progressbar")
        self.mw.geometry("+350+400")

        self.fr = Tkinter.Frame(self.mw)
        self.fr.pack(padx = 50, pady = 20)

        self.pg = ProgressBar(self.fr, min = 0, max = 30)
        self.pval = 0
        self.pg.updateProgress(self.pval)

        self.mw.after(5000, self.incr)

        self.mw.mainloop()

    def incr(self):

        self.pval += 6

        if self.pval == 30:
            self.mw.destroy()
        else:
            self.mw.after(5000, self.incr)
            self.pg.updateProgress(self.pval)

class ProgressBar:

    def __init__(self, master, orientation = "horizontal",
                 min = 0, max = 100, width = 100, height = 18,
                 doLabel = 1, appearance = "sunken",
                 fillColor = "blue", background = "gray",
                 labelColor = "yellow", labelFont = "Verdana",
                 labelText = "", labelFormat = "%d%%",
                 value = 50, bd = 2):

        # preserve various values

        self.master = master
        self.orientation = orientation
        self.min = min
        self.max = max
        self.width = width
        self.height = height
        self.doLabel = doLabel
        self.fillColor = fillColor
        self.labelFont =  labelFont
        self.labelColor = labelColor
        self.background = background
        self.labelText = labelText
        self.labelFormat = labelFormat
        self.value = value

        self.frame = Tkinter.Frame(master, relief = appearance, bd = bd)
        self.frame.pack()
        self.canvas = Tkinter.Canvas(self.frame, height = height, width = width, bd = 0,
                           highlightthickness = 0, background = background)
        self.scale = self.canvas.create_rectangle(0, 0, width, height,
                                                fill = fillColor)
        self.label = self.canvas.create_text(self.canvas.winfo_reqwidth()/ 2,
                                           height / 2, text = labelText,
                                           anchor = "c", fill = labelColor,
                                           font = self.labelFont)
        self.update()
        self.canvas.pack(side = 'top', fill = 'x', expand = 'no')

    def updateProgress(self, newValue, newMax = None):

        if newMax:
            self.max = newMax
        self.value = newValue
        self.update()

    def update(self):
        # Trim the values to be between min and max
        value = self.value
        if value > self.max:
            value = self.max
        if value < self.min:
            value = self.min
        # Adjust the rectangle
        if self.orientation  ==  "horizontal":
            self.canvas.coords(self.scale, 0, 0,
              float(value) / self.max * self.width, self.height)
        else:
            self.canvas.coords(self.scale, 0,
                               self.height - (float(value) /
                                              self.max*self.height),
                               self.width, self.height)
        # Now update the colors

        self.canvas.itemconfig(self.scale, fill = self.fillColor)
        self.canvas.itemconfig(self.label, fill = self.labelColor)

        # And update the label

        if self.doLabel:
            if value:
                if value >=  0:
                    pvalue = int((float(value) / float(self.max)) *
                                   100.0)
                else:
                    pvalue = 0
                self.canvas.itemconfig(self.label, text = self.labelFormat
                                         % pvalue)
            else:
                self.canvas.itemconfig(self.label, text = '')
        else:
            self.canvas.itemconfig(self.label, text = self.labelFormat %
                                   self.labelText)
        self.canvas.update_idletasks()
       
       
if __name__ == "__main__":
   app = MainWindow()
http://www.python-forum.de/topic-16376.html

Nur mal, um zu zeigen, daß es prinzipiell geht. Wir sind nicht dazu da, Deine Hausaufgaben zu machen, schon gar nicht, wenn sie bewertet werden :evil:.

Gruß
 
A

Anonymous

Gast
abgdf schrieb:
Guckstu:
Code:
#!/usr/bin/env python
.......
mit Python gibt es wie so oft wieder nur fehlende Bausteine, das wird wohl wiedermal bei den meisten so sein ;)
Code:
rob@priv0001:~> ./test.py
Traceback (most recent call last):
  File "./test.py", line 3, in <module>
    import Tkinter
ImportError: No module named Tkinter
rob@priv0001:~>
Bleiben wir lieber gleich in der bash, das kann dann wenigstens jeder nachvollziehen , auch wenn es hier wohl etwas an dem vorbei gehen sollte, was der Lehrer vermitteln will ;) ;) ;)
Code:
for (( i=0;i<=100;i=i+1 )); do printf "\r%4d%%\t" $i;for (( j=0; j<=(( $i/2 ));j=j+1 ));do echo -n "*";done;sleep 1;done;echo

robi
 

abgdf

Guru
mit Python gibt es wie so oft wieder nur fehlende Bausteine, das wird wohl wiedermal bei den meisten so sein
Mitnichten. "Tkinter" ist ein Standardmodul, es ist überall dabei.
Es ist nur so, daß in Python 3.0 - zum ersten Mal seit vielen Jahren - einiges umbenannt wurde, weshalb die meisten immer noch Python 2.x verwenden (wo das problemlos laufen dürfte). Mach doch mal
Code:
python -V
Hast Du 3.0 ?

In 3.0 heißt es übrigens "tkinter", also
Code:
import tkinter
(und auch alle Vorkommen von "Tkinter" im sonstigen Code müßten zu "tkinter" geändert werden), wahrscheinlich würde es aber dort aber trotzdem noch mehr Probleme geben.

Solche Probleme gibt es auch z.B. in Java oder Perl. Ich bin z.B. nicht sicher, ob Code von Perl 2.0 mit heutigen Perl-Versionen laufen würde.
Vor ein- oder zwei Jahren gab es sogar mal eine Änderung in gcc/g++, die dazu führte, daß der bisherige C/C++-Code vieler Programme nicht mehr kompiliert werden konnte und umgeschrieben werden mußte (das Grauen).
In Python ist so eine Modernisierung unter Bruch der Abwärtskompatibilität ausgesprochen selten (zuletzt bei Python 1.6).

Gruß

P.S: Nett, diese grafische Konsolenanzeige mit den Sternen !
 
A

Anonymous

Gast
abgdf schrieb:
weshalb die meisten immer noch Python 2.x verwenden (wo das problemlos laufen dürfte). Mach doch mal
.......
In Python ist so eine Modernisierung unter Bruch der Abwärtskompatibilität ausgesprochen selten (zuletzt bei Python 1.6).
Python 3.x nö nö, das brauch ich gar nicht, damit deine Programme bei mir laufen. Ich habe stolze 2.5 und da geht trotzdem nix ;)
Code:
# rpm -qa | grep python
python-gobject2-2.12.2-11
python-cairo-1.2.2-18
kdebindings3-python-3.5.5-29
python-xml-2.5-19.10
python-gnome-2.16.0-15
libxslt-python-1.1.17-27
python-numeric-24.2-36
python-2.5-19.10
python-gtk-2.10.3-11
python-qt-3.5.5-29
python-alchemist-1.0.37-0.pm.1
python-orbit-2.14.1-11
Vieleicht fehlt ja bei mir irgendwas essentielles, aber eigentlich habe ich es schon aufgegeben deine Python-Progrämmchen ans laufen zu bringen, ist ja nicht das erste Mal das es ums verrecken nicht laufen will. Schade drum.

Gruß robi
 

Wizzzard

Member
abgdf schrieb:
mit Python gibt es wie so oft wieder nur fehlende Bausteine, das wird wohl wiedermal bei den meisten so sein
Mitnichten. "Tkinter" ist ein Standardmodul, es ist überall dabei.

Die Aussage ist nicht ganz korrekt. Es ist dabei, wenn man es per Hand installiert. Ansonsten steckt das immer in einem extra Paket, das meist nicht standardmäßíg mitinstalliert wird.
 
Oben