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()