multithreading - Raspberry pi, tkinter and threading -


hi guys here, newbie on python , modules. so, developing app monitor office light system. using tkinter develop gui, try run loop within buttom comand , freezes gui. read little treading module. want use value returning variable var in loop. try can see below, function 'enable_automatico' don't call thread function 'acionamento_automatico'. don't error>

#!/usr/bin/python3 # importando os pacotes import sys import time import threading import rpi.gpio gpio tkinter import ttk tkinter import* import tkinter tk tkinter import messagebox   #configurando i/o gpio.setmode(gpio.bcm) gpio.setwarnings(false)  #configurando os pinos de entrada gpio.setup(18, gpio.in) #sensor de presença vendas gpio.setup(23, gpio.in) #sensor de luminosidade vendas gpio.setup(24, gpio.in) #sensor de presença engenharia gpio.setup(25, gpio.in) #sensor de luminosidade engenharia gpio.setup(12, gpio.in) #sensor de presença compras gpio.setup(16, gpio.in) #sensor de luminosidade compras gpio.setup(20, gpio.in) #sensor de presença marketing gpio.setup(21, gpio.in) #sensor de luminosidade marketing   #configurando os pinos de saída gpio.setup(17, gpio.out)#luminária vendas gpio.setup(27, gpio.out)#luminária b vendas gpio.setup(22, gpio.out)#luminária engenharia gpio.setup(5, gpio.out) #luminária b engenharia gpio.setup(6, gpio.out) #luminária compras gpio.setup(13, gpio.out)#luminária b compras gpio.setup(19, gpio.out)#luminária marketing gpio.setup(26, gpio.out)#luminária b marketing    #configurando os pinos de saída  para o modo de operação manual gpio.output(17, gpio.low)#luminária vendas gpio.output(27, gpio.low)#luminária b vendas gpio.output(22, gpio.low)#luminária engenharia gpio.output(5, gpio.low) #luminária b engenharia gpio.output(6, gpio.low) #luminária compras gpio.output(13, gpio.low)#luminária b compras gpio.output(19, gpio.low)#luminária marketing gpio.output(26, gpio.low)#luminária b marketing   #definição da fonte de texto large_font = ("verdana", 22) medium_font = ("verdana", 16) small_font = ("verdana", 12)    #a class thread  class mythread(threading.thread):     def __init__(self, threadid, name, counter):         threading.thread.__init__(self)         self.threadid = threadid         selfname = name         self.counter=counter   def acionamento_automatico(thread1, counter):      while (app.frames[acionamento].var.get()==2):          if ((gpio.input(18)==false) , (gpio.input(23)==false)):             gpio.output(17, gpio.high)             gpio.output(27, gpio.low)             app.frames[acionamento].vendasframe.luminaria_esquerdaframev.label6.configure(text="ligado")             app.frames[acionamento].vendasframe.luminaria_direitaframev.label7.configure(text="desligado")          if ((gpio.input(18)==true) , (gpio.input(23)==false)):             gpio.output(17, gpio.low)             gpio.output(27, gpio.low)             app.frames[acionamento].vendasframe.luminaria_esquerdaframev.label6["text"]="desligado"             app.frames[acionamento].vendasframe.luminaria_direitaframev.label7["text"]="desligado"          if ((gpio.input(18)==false) , (gpio.input(23)==true)):             gpio.output(17, gpio.high)             gpio.output(27, gpio.high)             app.frames[acionamento].vendasframe.luminaria_esquerdaframev.label6["text"]="ligado"             app.frames[acionamento].vendasframe.luminaria_direitaframev.label7["text"]="ligado"           if ((gpio.input(18)==true) , (gpio.input(23)==false)):             gpio.output(17, gpio.low)             gpio.output(27, gpio.low)             app.frames[acionamento].vendasframe.luminaria_esquerdaframev.label6["text"]="desligado"             app.frames[acionamento].vendasframe.luminaria_direitaframev.label7["text"]="desligado"      thread1.exit()  #habilitar modo automático def enable_automatico():      automatico_message = messagebox.showinfo(title="modo automático", message = "o acionamento das luminárias será feito conforme luminosidade e pessoas no setor, resultando num menor consumo de energia")      app.frames[acionamento].vendasframe.luminaria_esquerdaframev.lev_button.configure(state=disabled)     app.frames[acionamento].vendasframe.luminaria_direitaframev.ldv_button.configure(state=disabled)     app.frames[acionamento].engenhariaframe.luminaria_esquerdaframee.lee_button.configure(state=disabled)     app.frames[acionamento].engenhariaframe.luminaria_direitaframee.lde_button.configure(state=disabled)     app.frames[acionamento].comprasframe.luminaria_esquerdaframec.lec_button.configure(state=disabled)     app.frames[acionamento].comprasframe.luminaria_direitaframec.ldc_button.configure(state=disabled)     app.frames[acionamento].marketingframe.luminaria_esquerdaframem.lem_button.configure(state=disabled)     app.frames[acionamento].marketingframe.luminaria_direitaframem.ldm_button.configure(state=disabled)     app.frames[acionamento].vendasframe.luminaria_esquerdaframev.lev_button.update()     app.frames[acionamento].vendasframe.luminaria_direitaframev.ldv_button.update()     app.frames[acionamento].engenhariaframe.luminaria_esquerdaframee.lee_button.update()     app.frames[acionamento].engenhariaframe.luminaria_direitaframee.lde_button.update()     app.frames[acionamento].comprasframe.luminaria_esquerdaframec.lec_button.update()     app.frames[acionamento].comprasframe.luminaria_direitaframec.ldc_button.update()     app.frames[acionamento].marketingframe.luminaria_esquerdaframem.lem_button.update()     app.frames[acionamento].marketingframe.luminaria_direitaframem.ldm_button.update()      global thread1     thread1 = mythread(1, "thread-1", 1)     thread1.start() 

thread runs code in function run() don't have it

from threading import thread import time  # -----  def my_function(name, counter):     x in range(counter):         print(name, x)         time.sleep(0.5)  # -----  class mythread(thread):      def run(self):         my_function("hello", 10)  # -----  thread = mythread() thread.start() 

or can shorter

from threading import thread import time  # -----  def my_function(name, counter):     x in range(counter):         print(name, x)         time.sleep(0.5)  # -----  thread = thread( target=my_function, args=("world", 10) ) thread.start() 

edit: example how control thread , stop it.

btw: in situations should use queue communicate thread. main thread should use print() , works gui tkinter

from threading import thread import time  # -----  def my_function(name, counter):     x in range(counter):         if stop:             print('stop')             break         print(name, x)         time.sleep(0.5)  # -----  stop = false  thread = thread( target=my_function, args=("world", 20) )  print("alive 0:", thread.is_alive()) # false  thread.start()  print("alive 1:", thread.is_alive()) # true  time.sleep(2)  print("alive 2:", thread.is_alive()) # true  time.sleep(2)  print("alive 3:", thread.is_alive()) # true stop = true print("alive 4:", thread.is_alive()) # true  time.sleep(2)  print("alive 5:", thread.is_alive()) # false  # wait till thread ends thread.join()  print("alive 5:", thread.is_alive()) # false 

Comments

Popular posts from this blog

java - SSE Emitter : Manage timeouts and complete() -

jquery - uncaught exception: DataTables Editor - remote hosting of code not allowed -

java - How to resolve error - package com.squareup.okhttp3 doesn't exist? -