Probleme mit Vererbung während Threading
Verfasst: Dienstag 31. Juli 2018, 15:48
hallo
ich weiß nicht, ob das überhaupt möglich ist.
ich habe zwei verschiedene klassen, die ich je getrennt voneinander als Thread laufen lasse.
die class_1 verarbeitet daten. während diese das tut, soll eine prozessbar aus class_2 den fortschritt des verlaufs anzeigen.
damit das möglich ist, muß die class_1 also die class_2 erben (denk ich), damit die prozessbar (bzw. die variable der prozessbar "self.progress_var")
aus der class_2 auch in class_1 angesprochen werden kann.
ist das überhaupt möglich und wenn ja, how???
ich weiß nicht, ob das überhaupt möglich ist.
ich habe zwei verschiedene klassen, die ich je getrennt voneinander als Thread laufen lasse.
die class_1 verarbeitet daten. während diese das tut, soll eine prozessbar aus class_2 den fortschritt des verlaufs anzeigen.
damit das möglich ist, muß die class_1 also die class_2 erben (denk ich), damit die prozessbar (bzw. die variable der prozessbar "self.progress_var")
aus der class_2 auch in class_1 angesprochen werden kann.
ist das überhaupt möglich und wenn ja, how???
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'DMD-OL'
from Tkinter import Tk, Toplevel, Label, Button, StringVar, DoubleVar
import ttk
import threading
import os
import time
class Class_1(threading.Thread):
update_datei = "C:\Users\DMD-OL\Documents\Python\Handy-Datenbank\DATANORM\DATANORM.002"
filesize = int(os.path.getsize(update_datei))
size = 49152
def __init__(self, ident, name, instance):
threading.Thread.__init__(self)
self.id = ident
self.name = name
self.instance = instance
def run(self):
for hallo in range(100):
print hallo
print self.filesize
print self.size
# self.progress_var.set(hallo)
time.sleep(1)
if runString is False:
break
self.instance.closing()
print "Finished"
class Class_2(threading.Thread):
def __init__(self, ident, name):
threading.Thread.__init__(self)
self.id = ident
self.name = name
self.second = Toplevel()
self.second.title("Second window")
self.second.geometry("%dx%d+%d+%d" % (300, 150, 600, 250))
self.var = StringVar()
self.var.set("Gestartet von:\n'{}', ID: '{}'".format(self.name, self.id))
self.label = Label(self.second, textvariable=self.var)
self.label.place(relx=.5, rely=.25, anchor="c")
self.progress_var = DoubleVar()
self.progress_bar = ttk.Progressbar(self.second, variable=self.progress_var, length=250)
self.progress_bar.place(relx=.5, rely=.5, anchor="c")
self.break_button = Button(self.second, text="ABBRECHEN", width=15, command=self.stopping)
self.break_button.place(relx=.5, rely=.8, anchor="c")
self.close_button = Button(self.second, text="CLOSE", width=15, command=self.second.quit)
def stopping(self):
global runString
runString = False
self.var.set("Der Vorgang wurde\nabgebrochen!")
self.label.place(relx=.5, rely=.25, anchor="c")
self.progress_bar.destroy()
self.break_button.destroy()
self.close_button.place(relx=.5, rely=.7, anchor="c")
def closing(self):
self.var.set("Der Vorgang wurde\nabgeschlossen!")
self.label.place(relx=.5, rely=.25, anchor="c")
self.break_button.destroy()
self.close_button.place(relx=.5, rely=.8, anchor="c")
class MyFirstGUI:
def __init__(self):
self.first = Tk()
self.first.title("First window")
self.first.geometry("%dx%d+%d+%d" % (200, 100, 600, 250))
self.label = Label(self.first, text="This is my first GUI!")
self.label.place(relx=.2, rely=.2, anchor="w")
self.start_button = Button(self.first, text="START", width=15, command=self.start)
self.start_button.place(relx=.2, rely=.5, anchor="w")
self.close_button = Button(self.first, text="CLOSE", width=15, command=self.first.quit)
self.close_button.place(relx=.2, rely=.8, anchor="w")
self.first.mainloop()
def start(self):
self.first.withdraw()
self.first.update_idletasks()
thread_2 = Class_2(0, "Christian")
thread_1 = Class_1(0, "Christian", thread_2)
thread_2.start()
thread_1.start()
runString = True
MyFirstGUI()