こんにちは皆、私はパイソンとそのモジュールの初心者です。だから、私はオフィスライトシステムを監視するためのアプリを開発しています。私はGUIを開発するためにtkinterを使用しています、私はbuttom comandの中でループを実行しようとすると、私のguiをフリーズします。だから私はモジュールを踏んでいくことについてちょっと読んだ。 変数varから返された値をループ内で使用したいのですが。私は以下のようにしようとしますが、関数 'enable_automatico'はスレッド関数 'acionamento_automatico'を呼び出しません。私はラズベリーパイ、チキンとスレッディング
#!/usr/bin/python3
# Importando os pacotes
import sys
import time
import threading
import RPi.GPIO as GPIO
from tkinter import ttk
from tkinter import*
import tkinter as tk
from tkinter import messagebox
#Configurando a 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 A Vendas
GPIO.setup(27, GPIO.OUT)#Luminária B Vendas
GPIO.setup(22, GPIO.OUT)#Luminária A Engenharia
GPIO.setup(5, GPIO.OUT) #Luminária B Engenharia
GPIO.setup(6, GPIO.OUT) #Luminária A Compras
GPIO.setup(13, GPIO.OUT)#Luminária B Compras
GPIO.setup(19, GPIO.OUT)#Luminária A 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 A Vendas
GPIO.output(27, GPIO.LOW)#Luminária B Vendas
GPIO.output(22, GPIO.LOW)#Luminária A Engenharia
GPIO.output(5, GPIO.LOW) #Luminária B Engenharia
GPIO.output(6, GPIO.LOW) #Luminária A Compras
GPIO.output(13, GPIO.LOW)#Luminária B Compras
GPIO.output(19, GPIO.LOW)#Luminária A 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) and (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) and (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) and (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) and (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()
のようにGUIで動作する必要があるかもしれない 'root.after(ミリ秒、FUNCTION_NAME)'定期的に関数を実行しないために、あなたは何のあなたのループやスレッドが必要になりますを使用します。 – furas
私の場合、 'acionamento_automatico'は' Thread'クラスの一部ではないので、 'enable_automatico'は起動できません。あなたは 'run()'という名前を使わなければなりません。 – furas
私はこのアプリでもっとスレッドを持っています。自分のコードにスレッドを使用していますか?私はかなり失われています... – armf1993