Hallo Forum
Gegeben ist ein Programm, dass String-Operationen durchführt. Bei den größeren Verschlüsselungstiefen (ab 256-fach bzw. 512- fache Verschlüsselung), ist die Rechenleistung in der Performance schon deutlich spürbar. Während eine Seite in 3 Sekunden kodiert wird, dauern fünf Seiten schon 18 Seknden. Bei zehn Seiten 53 Sekunden usw...
Nun werden die wenigsten Leute seitenweise Nachrichten codieren. Hauptsächlich werden mit dem Programm kleine Nachrichten versendet. Dennoch...
Wenn nun doch jemand einen längeren Text codieren möchte, wäre es schön, wenn der Nutzer sieht, dass der Rechner noch lebt
Mein Programm hat einen TK-inter Teil unten und oben befindet sich das eigentliche Programm. Im oberen Teil sind diverse Routinen und Schleifen vorhanden. Jetzt dachte ich mir, dass ich in die einzelnen Schleifen und Routinen so eine Art "Anstoss-Marker" einbaue. Das heisst es müsste irgendwo eine Grafik oder ein Fenster mit Grafik offen sein, an das die "Anstoss-Marker", wenn sie den durchlaufen werden, ein Signal absetzen und so die Grafik irgend etwas macht (drehen,blinken...oder sonst was).
Ich habe so etwas noch nicht gemacht. Kann also sein, dass ich komplett daneben liege
Abstraktes Programm-Beispiel:
--------------------------------------------------------------
Programm-Code
/Programm-Code
Schleife
Anstoss-Marker
/Schleife
Programm-Code
/Programm-Code
Schleife
Anstoss-Marker
/Schleife
Programm-Code
/Programm-Code
Berechnungs-Routine
Anstoss-Marker
Berechnungs-Routine
Programm-Code
/Programm-Code
Berechnungs-Routine
Anstoss-Marker
/Berechnungs-Routine
TK-inter-Fenster
TK-inter-Fenster
--------------------------------------------------------------
Natürlich müsste die Aktivitäts-Anzeige vor den Operationen aufgerufen werden, und dann im Prozess als eine Art hoheitlicher Überwachungsmodus für die Anstoss-Marker verfügbar sein.
Einer eine Idee wie sowas aussehen könnte oder wie sowas gemacht wird?
Gruss jts
Aktivitäts-Anzeige
Kommt jetzt ein bisschen darauf an, was du willst.
Wenn es nur um einen Spinner geht, weil du nicht weisst, wie lange es dauern wird, dann empfiehlt sich einfach die lange Berechnung in einen Thread auszulagern, und mittels der after-Methode tkinter in einem Timer dazu zu bringen, an irgendwas rumzudrehen.
Die after-Methode ist hier bis zum sprichwoertlichen erbrechen durchdekliniert im Tkinter-Forum. Ca jede zweite Frage bezieht sich letztlich darauf. Les dich da mal ein bisschen ein. Und ein Tipp: bau erstmal eine kleine, eigene Test-App, um damit rumzuspielen. Gerade bei Anfaengern geht der Versuch, Dinge in eine bestehende Anwendung einzubauen, oftmals schief - und dann versteht man nicht, woran es liegt.
Wenn es nur um einen Spinner geht, weil du nicht weisst, wie lange es dauern wird, dann empfiehlt sich einfach die lange Berechnung in einen Thread auszulagern, und mittels der after-Methode tkinter in einem Timer dazu zu bringen, an irgendwas rumzudrehen.
Die after-Methode ist hier bis zum sprichwoertlichen erbrechen durchdekliniert im Tkinter-Forum. Ca jede zweite Frage bezieht sich letztlich darauf. Les dich da mal ein bisschen ein. Und ein Tipp: bau erstmal eine kleine, eigene Test-App, um damit rumzuspielen. Gerade bei Anfaengern geht der Versuch, Dinge in eine bestehende Anwendung einzubauen, oftmals schief - und dann versteht man nicht, woran es liegt.
Abend Leute
Ja, ein Spinner würde genügen. Wobei mir jetzt eingefallen ist, dass ich ein leeres Code-Textfeld zur Verfügung haben, in das ich ja Ausgaben während des Prozessfortschrittes schreiben könnte.
Entweder so:
#
##
###
####
Aber wenn die Seite voll ist - und das wird sie - sieht man keinen Unterschied mehr, wenn alles mit Gatterzeichen gefüllt ist. Wie wäre denn so was:
|
/
-
|
/
-
\
Also eine drehende Linie?
Oder, wie auf der Seite unten, die System-Rückfrage-Box - aber diesmal als "Arbeitsanzeige/Spinner". Wäre sowas möglich, die Spinneranzeige auszulagern in ein solches Extrafenster, oder doch die Codetext-Feld-Box verwenden?
https://www.crypto-code-tool.com/software.html
Gruss jts
Ja, ein Spinner würde genügen. Wobei mir jetzt eingefallen ist, dass ich ein leeres Code-Textfeld zur Verfügung haben, in das ich ja Ausgaben während des Prozessfortschrittes schreiben könnte.
Entweder so:
#
##
###
####
Aber wenn die Seite voll ist - und das wird sie - sieht man keinen Unterschied mehr, wenn alles mit Gatterzeichen gefüllt ist. Wie wäre denn so was:
|
/
-
|
/
-
\
Also eine drehende Linie?
Oder, wie auf der Seite unten, die System-Rückfrage-Box - aber diesmal als "Arbeitsanzeige/Spinner". Wäre sowas möglich, die Spinneranzeige auszulagern in ein solches Extrafenster, oder doch die Codetext-Feld-Box verwenden?
https://www.crypto-code-tool.com/software.html
Gruss jts
Natuerlich ist das moeglich, ist ein Fenster wie jedes andere. Allerdings musst du da dein eigenes, neues TopLevel Fenster machen - das eingebaute Messagebox-Ding erlaubt dir keinen Zugriff auf seine Innereien so weit ich weiss.
Abend _deets_
Alles klar. Ich werde deinen Rat beherzigen und mir ein externes Testprogramm basteln. Ein paar schleifen rein, um Aktivität zu produzieren, sowie ein Testfenster. Wenn da Probleme auftreten, melde ich mich wieder.
Die after-Methode werde ich mir auch ansehen. Wahrscheinlich muss dass Aktivitätsfenster periodisch "angestubst" werden. Deshalb vermutlich dein Timer-Hinweis.
Danke für die Tipps
Gruss jts
Alles klar. Ich werde deinen Rat beherzigen und mir ein externes Testprogramm basteln. Ein paar schleifen rein, um Aktivität zu produzieren, sowie ein Testfenster. Wenn da Probleme auftreten, melde ich mich wieder.
Die after-Methode werde ich mir auch ansehen. Wahrscheinlich muss dass Aktivitätsfenster periodisch "angestubst" werden. Deshalb vermutlich dein Timer-Hinweis.
Danke für die Tipps
Gruss jts
Hallo Forum
Als alternativer Ansatz:
Könnte man nicht periodisch Meldungen absetzen:
Also immer wenn die innere Schleife einmal durch ist, ein Fenster einblenden, kurz stehen lassen und wieder entfernen.
Dann hätte man so eine Art Blinkeffekt "Bitte warten..."
Gruss jts
Als alternativer Ansatz:
Könnte man nicht periodisch Meldungen absetzen:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from tkinter import *
from tkinter import messagebox
####################
# Hier ist Block A #
####################
def Schleife():
ione = 0
itwo = 0
while ione <= 10:
ione = ione + 1
while itwo <= 500:
itwo = itwo +1
print("Testausgabe")
print(" Testausgabe")
print(" Testausgabe")
print(" Testausgabe")
# hier soll ein Info-Fenster aufgehen "Prozess in Arbeit" oder "Bitte warten..."
# dann nach ein paar Sekunden wieder schliessen... dann nächster Schleifendurchlauf...
print("Schlaufe beginnt unten im Block B")
####################
# Hier ist Block B #
####################
# Fenster-Titel
root = Tk(className=" Hauptfenster")
root.resizable(FALSE,FALSE)
root.attributes("-topmost", 1)
root.wm_attributes('-type', 'splash')
def center_window(width=300, height=200):
# get screen width and height
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
# calculate position x and y coordinates
x = (screen_width/2) - (width/2)
y = (screen_height/2) - (height/2)
root.geometry('%dx%d+%d+%d' % (width, height, x, y))
center_window(800, 480)
# Titel Schrift ueber Programm-Fenster
zeroLabel = Label(root, text=">> Hauptfenster mit Aktivität <<", font=("TimesNewRoman", 10), bg=('#999999'))
zeroLabel.place(x=305,y=28)
Schleife()
root.mainloop()
Dann hätte man so eine Art Blinkeffekt "Bitte warten..."
Gruss jts
@jake-the-snake: das ist ja genau das, was man nicht haben möchte. Man könnte dann ja auch das Fenster die ganze Zeit stehen lassen, und dann ist es halt eingefroren.
Dir hat man sicher auch schon gesagt, keine Sternchenimporte zu benutzen und Dich an die Namenskonvention zu halten.
Dir hat man sicher auch schon gesagt, keine Sternchenimporte zu benutzen und Dich an die Namenskonvention zu halten.
Mahlzeit Forum
Wenn du dir die 5 Knöpfe ansiehst, dann geht es im Prinzip um den roten "Verschlüsseln"-Knopf.
https://www.crypto-code-tool.com/software.html
Drückt man z. B. auf den Beenden-Knopf, erscheint die messagebox. Das gute daran ist, dass alle anderen Knöpfe solange gesperrt sind, bis im System-Rückfrage-Fenster eine Entscheidung gefällt wird (Ja/Nein). So sollte das auch bei einem Klick auf "Verschlüsseln" sein - also die Sperre, nicht die Knöpfe!
Wenn ich jetzt bei der nächsten Softwareversion die "Verschlüsseln"-Funktion auslagere (in einen anderen Thread) wäre die GUI ja wieder frei - und das darf nicht sein. Es darf keine andere Funktion möglich sein, bis das Ergebnis von "Verschlüsseln" vorliegt.
Also: Die eingefrorene GUI ist nicht das, was mich stört! Mich stört, dass während die GUI wartet, weil noch Rechenoperationen laufen, der Nutzer eventuell das Gefühl bekommen könnte, der Rechner sei "abgeschmiert". Deswegen ja meine Idee, von Zeit zu Zeit da was einzublenden, damit man sieht, das Programm arbeitet noch.
Ich hoffe ich konnte das verständlich ausführen.
Gruss jts
Ich habe mir das nochmal überlegt...das ist ja genau das, was man nicht haben möchte.
Wenn du dir die 5 Knöpfe ansiehst, dann geht es im Prinzip um den roten "Verschlüsseln"-Knopf.
https://www.crypto-code-tool.com/software.html
Drückt man z. B. auf den Beenden-Knopf, erscheint die messagebox. Das gute daran ist, dass alle anderen Knöpfe solange gesperrt sind, bis im System-Rückfrage-Fenster eine Entscheidung gefällt wird (Ja/Nein). So sollte das auch bei einem Klick auf "Verschlüsseln" sein - also die Sperre, nicht die Knöpfe!
Wenn ich jetzt bei der nächsten Softwareversion die "Verschlüsseln"-Funktion auslagere (in einen anderen Thread) wäre die GUI ja wieder frei - und das darf nicht sein. Es darf keine andere Funktion möglich sein, bis das Ergebnis von "Verschlüsseln" vorliegt.
Also: Die eingefrorene GUI ist nicht das, was mich stört! Mich stört, dass während die GUI wartet, weil noch Rechenoperationen laufen, der Nutzer eventuell das Gefühl bekommen könnte, der Rechner sei "abgeschmiert". Deswegen ja meine Idee, von Zeit zu Zeit da was einzublenden, damit man sieht, das Programm arbeitet noch.
Ich hoffe ich konnte das verständlich ausführen.
Gruss jts