Python - Threading + GUI (Tkinter) python

 
Vista:

Threading + GUI (Tkinter) python

Publicado por Juliana (1 intervención) el 20/01/2019 22:40:49
Estoy haciendo una interfaz de usuario con python, tengo por un lado la GUI realizada en tkinter y un Main program que me devuelve los valores que voy a mostrar en dicha interfaz pero tengo un problema y es que el programa es un poco lento por lo que tome la decisión de implementar Threading, realice el programa que consta de: Thread 1: Leer sensores Thread 2: Guardar valores en un documento de texto por cada sensor pero aqui viene mi pregunta, ya que no se como devolver esos valores a mi Script de la interfaz. anteriormente mi programa era de esta forma

1
2
3
4
5
6
7
8
def MainProgram(direcciones):
datosSensor=[]
for i in range(len(direcciones)):
    direccion=direcciones[i]
    datos=ReadInformation.Read(direccion)
    SaveInformation.Savetxt(datos)
    datosSensor.append(datos)
return datosSensor

Simplemente llamaba esa funcion a mi programa del GUI, pero cuando implemento threading intente hacer un thread que me devuelva el valor pero simplemente queda y no corre mas el programa, el codigo siguiente es el que implemente los threads pero sin el de return datos porque no se bien como debo hacerlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def read_sensor(direccion):
ReadInformation.init()
while True:
    shared_memory_guard.acquire()
    for i in direcciones:
        data=ReadInformation.Read(i)
        information.append(data)
    print("Read")
    shared_memory_guard.release()
 
def save_sensor(datos):
while True:
    shared_memory_guard.acquire()
    print("save")
    for j in datos:
        SaveInformation.Savetxt(j)
    del information[:]
    shared_memory_guard.release()
direcciones = ScanAddress.address()
print('Creating threads')
t = threading.Thread(target=read_sensor, args=(direcciones,))
t2 = threading.Thread(target = save_sensor, args=(information,))
print('Executing read data thread')
t.start()
print('Executing file writer thread')
t2.start()

Espero que puedan ayudarme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder