ProgressBar während der Erstellung von QR-Codes

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
DMD-OL
User
Beiträge: 203
Registriert: Samstag 26. Dezember 2015, 16:21
Wohnort: Oldenburg (Oldenburg)

Dienstag 8. August 2017, 15:09

hi
ich lese den gesamten inhalt einer datenbank aus und erstelle daraus qr-codes.
da das (je nach dem) etwas länger dauert, würde ich gern solange eine ProgressBar in Tkinter zeigen.
kann mir da jemand helfen?
ich habe diesen code gefunden, den ich gern verwenden möchte:

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk


class SampleApp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.button = ttk.Button(text="Start", command=self.start)
        self.button.pack()
        self.progress = ttk.Progressbar(self, orient="horizontal",
                                        length=200, mode="determinate")
        self.progress.pack()

        self.bytes = 0
        self.maxbytes = 0

    def start(self):
        self.progress["value"] = 0
        self.maxbytes = 50000
        self.progress["maximum"] = 50000
        self.read_bytes()

    def read_bytes(self):
        '''simulate reading 500 bytes; update progress bar'''
        self.bytes += 500
        self.progress["value"] = self.bytes
        if self.bytes < self.maxbytes:
            # read more bytes after 100 ms
            self.after(100, self.read_bytes)

app = SampleApp()
app.mainloop()
muß ich die gesamte größe des inhalts der datenbank kennen, damit ich die maximalgröße (self.maxbytes)
für die progessbar angeben kann?
Zuletzt geändert von Anonymous am Dienstag 8. August 2017, 15:43, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 3726
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 8. August 2017, 15:46

Ja, musst du. Zumindest grob, ggf. kann man so etwas abschaetzen, aber ohne wenigstens eine grobe Idee geht es nicht.

Du bist damit auch dem Geheimnis auf der Spur, warum in beliebten Betriebssystemen gelegentlich Fortschrittsbalken ewig an den 99% rumknabbern....
DMD-OL
User
Beiträge: 203
Registriert: Samstag 26. Dezember 2015, 16:21
Wohnort: Oldenburg (Oldenburg)

Dienstag 8. August 2017, 16:12

und wie mach ich das???
ich hab schon krasse probleme, die progressbar überhaupt anzeigen zu lassen, während der rechner busy is :(
Sirius3
User
Beiträge: 8618
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 8. August 2017, 16:31

@DMD-OL: die Anzahl der Einträge in einer Datenbank zu zählen sollte doch kein Problem sein? Das eigentliche Arbeiten würde ich in einem Hintergrundthread machen. Die ganze Logik sollte unabhängig von einer GUI laufen, z.B. in dem man eine Klasse hat, die man nach dem Fortschritt fragen kann, oder ein Event-System, das sich selbst bei jeder Änderung meldet.
Antworten