Multiprozess oder Multithreading in Tkinter für Filedownload- Statusanzeige.
Verfasst: Donnerstag 7. Mai 2020, 23:27
Hallo Forumer,
Ich baue gerade eine kleine GUI für mich die dazu dient Dateien herunterzuladen.
Hierzu gibt es ein Entry mit Downloadpfad und ein weiteres Entry mit der Netzwerk-Adresse. Also http://...
Per Knopfdruck soll der Download erfolgen.
Ich würde ganz gern eine Anzeige einbauen, die den aktiven Download anzeigt.
Es muss auch kein Statusbalken sein. Eine blinkende Downloadschrift macht es bei mir.
Allerdings meine Frage:
Mein Ansatz war Multiprocessing um dieses zu bewerkstelligen, allerdings habe ich keine Ahnung ob es nötig ist.
Ich habe mein Script zusammengekürzt damit es verständlicher ist. Hoffentlich habe ich es erreicht.
Findet ihr den Ansatz richtig, wenn es auch noch verbesserungswürdig ist. Oder ist es besser von der verwendeten Downloadfunktion sich einen Rückgabewert zu erzeugen. WEnn ich auch noch nicht weis wie. Mutlithreating ist glaub ich mit Kanonen auf Spatzen schießen.
Danke für eure Hilfe im voraus.
Ich baue gerade eine kleine GUI für mich die dazu dient Dateien herunterzuladen.
Hierzu gibt es ein Entry mit Downloadpfad und ein weiteres Entry mit der Netzwerk-Adresse. Also http://...
Per Knopfdruck soll der Download erfolgen.
Ich würde ganz gern eine Anzeige einbauen, die den aktiven Download anzeigt.
Es muss auch kein Statusbalken sein. Eine blinkende Downloadschrift macht es bei mir.
Allerdings meine Frage:
Mein Ansatz war Multiprocessing um dieses zu bewerkstelligen, allerdings habe ich keine Ahnung ob es nötig ist.
Ich habe mein Script zusammengekürzt damit es verständlicher ist. Hoffentlich habe ich es erreicht.

Code: Alles auswählen
from multiprocessing import Process
import tkinter as tk
import urllib3
import requests
class MyWindow:
def __init__(self, master):
self.colors = {"green": "#22cf00", "bg":"#1a1a1a", "fg":"#3c3c3c"}
fm = tk.Frame(master)
fm.pack()
self.entry = tk.Entry(fm)
self.entry.pack(pady=20)
self.label = tk.Label(fm, text="Waiting for you!", background=self.colors["bg"], foreground=self.colors["fg"])
self.label.pack(pady=10)
self.btn = tk.Button(fm, text="click me", command=self.func)
self.btn.pack(pady=10)
# Funktion download file from http
def func(self):
print("Hello", arg)
url = 'http://www.tgcomes.es/CONIL-VEJER-BARB-ZAHARA.pdf' # Testfile
requests.get(url, stream=True)
# flash label
def flash(self, arg):
print("Hello", arg)
self.label.config(text=arg)
#bg = self.label.cget("background")
#fg = self.label.cget("foreground")
#self.label.configure(background=fg, foreground=bg)
#root.after(1000, self.flash)
def multiproc(self):
self.p = Process(target=self.func, args=("World!",))
self.q = Process(target=self.flash, args=("Universe!",))
self.p.start()
self.q.start()
self.p.join()
self.q.join()
self.label.configure(text="Finish")
if __name__ == "__main__":
root = tk.Tk()
myapp = MyWindow(root)
root.title("test")
root.geometry("200x200")
root.mainloop()
Danke für eure Hilfe im voraus.