Ya cumple su función que es recibir bytes y según cual sea este activar una alarma.
Pero quiero hacer que con un Checkbutton se pueda desactivar la alarma para un byte en particular (poniendo a 1 o 0 una variable):
Código Python:
Ver original
w1= Checkbutton(principal, text= "Silenciar Modem 3", variable = enmascarar3, onvalue = 1, offvalue = 0, height=5, width = 20).pack()
la variable enmascarar3 se modifica perfectamente al tildar o destildar la casilla pero en otra porción del código tengo un condicional que usa esa variable y no la lee como realmente es sino que la ve como PY_VAR1, y ya probé con "global enmascarar3"
Código Python:
Ver original
elif (data) == (14).to_bytes(1,byteorder='big'): if v[11] == 0: txt=open('historial.txt','a') txt.write(datetime.datetime.now().ctime()) txt.write(': MODEM 3 Unit Fault \n') txt.close() if (enmascarar3 == 0): #AQUI ES DONDE VE PY_VAR1 (cuando deberia ser 1 o 0) startAlarm() v[11] = 1 #print ("MODEM 3 \tUnit Fault") v[10] = 0
adjunto el codigo por si pueden darse cuenta en donde estoy fallando...
no me parece conveniente tener que hacerlo con botones y etiquetas teniendo la opcion del checkbutton...
ya aprovecho y les cuento que intente "ordenar" los componentes de la ventana cambiando pack() por grid() y dejan de aparecer en la misma
codigo:
en linea 24 defino variable
linea 46 la defino como global
linea 69,80,91 estan los condicionales
linea 184 el checkbutton
Código Python:
Ver original
import socket# funcionalidad para recibir UDP import os # usaremos system para limpiar pantalla import time# para delays import datetime# para la fecha y hora import threading from tkinter import * import winsound UDP_IP = "192.168.0.1"# ip de host donde corre el software UDP_PORT = 5005# verificar que sea el mismo puerto a donde envia el arduino sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #crea un soket INET para IPV4 de UDP para enviar datagramas sock.bind((UDP_IP, UDP_PORT)) v = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] var=1 principal = Tk() principal.minsize(800,600) principal.maxsize(800,600) principal.title("titulo----") pantalla=StringVar() enmascarar3 = 0#variable a modificar con "enmascarar" enmascarar6 = IntVar() #recibe el texto de la alarma y suena def alertar(): if var: principal.bell() principal.after(500, alertar) def stopAlarm(): global var var=0 def startAlarm(): global var var=1 def leerAlarmas(): global enmascarar3 lienzo = "" #variable para sumar los textos a mostrar data, addr = sock.recvfrom(512) # se reciben los datos en el buffer(ojo con el nro de buffer, no debe ser menor que los datos recibidos)recvfrom(...) # recvfrom(buffersize[, flags]) -> (data, address info)se crea buffer de 512 Kbytes, addr no importa para este caso # a continunacion segun los datos recibidos se setean las variables para cada estado de cada modem # int.to_bytes(length, byteorder, *, signed=False) "big" setea el bit mas significativo if (data) == (2).to_bytes(1,byteorder='big'): if v[10] == 0: v[10] = 1#print("MODEM 3 \tOK") v[11] = 0 v[12] = 0 v[13] = 0 v[14] = 0 stopAlarm() # elif (data) == (14).to_bytes(1,byteorder='big'): if v[11] == 0: txt=open('historial.txt','a') txt.write(datetime.datetime.now().ctime()) txt.write(': MODEM 3 Unit Fault \n') txt.close() if (enmascarar3 == 0): startAlarm() v[11] = 1 #print ("MODEM 3 \tUnit Fault") v[10] = 0 elif (data) == (26).to_bytes(1,byteorder='big'): if v[12] == 0: txt=open('historial.txt','a') txt.write(datetime.datetime.now().ctime() ) txt.write(': MODEM 3 TX Traffic \n') txt.close() if enmascarar3 == 0: startAlarm() v[12] = 1 #print ("MODEM 3 \tTX Traffic") v[10] = 0 elif (data) == (38).to_bytes(1,byteorder='big'): if v[13] == 0: txt=open('historial.txt','a') txt.write(datetime.datetime.now().ctime() ) txt.write(': MODEM 3 RX Traffic \n') txt.close() if enmascarar3 == 0: startAlarm() v[13] = 1 #print ("MODEM 3 \tRX Traffic") v[10] = 0 elif (data) == (50).to_bytes(1,byteorder='big'): if v[14] == 0: txt=open('historial.txt','a') txt.write(datetime.datetime.now().ctime() ) txt.write(': MODEM 3 Deferred Alarm \n') txt.close() if enmascarar3 == 0: startAlarm() v[14] = 1 #print ("MODEM 3 \tDeferred Alarm") v[10] = 0 #imprimimos los encabezados: lienzo = (lienzo + "Nro. Modem \tEstado\n") ################################################### #ahora segun la variable que se encuentre en '1' va a ser lo que se imprima: #sentencias para el MODEM Nro. 3: if v[10] == 1: lienzo = (lienzo + "MODEM 3\tOK\n") w = Label(principal, text="MODEM 3\tOK\n", bg="green", fg="black") w.pack() #-------------------------------------------------- elif ((v[11] and v[12] and v[13]) or (v[11] and v[12] and v[14]) or (v[11] and v[13] and v[14]) or (v[12] and v[13] and v[14]) or (v[11] and v[12] and v[13] and v[14])): lienzo = (lienzo + "MODEM 3\tMULTIPLES FALLAS!\n") elif v[11] and v[12] == 1: lienzo = (lienzo + "MODEM 3\tUnit Fault - Tx Fault\n") elif v[11] and v[13] == 1: lienzo = (lienzo + "MODEM 3\tUnit Fault - Rx Fault\n") elif v[11] and v[14] == 1: lienzo = (lienzo + "MODEM 3\tUnit Fault - Deferred Alarm\n") elif v[12] and v[13] == 1: lienzo = (lienzo + "MODEM 3\tRx Fault - Tx Fault\n") elif v[12] and v[14] == 1: lienzo = (lienzo + "MODEM 3\tTx Fault - Deferred Alarm\n") elif v[13] and v[14] == 1: lienzo = (lienzo + "MODEM 3\tRx Fault - Deferred Alarm\n") #-------------------------------------------------- elif v[11] == 1: lienzo = (lienzo + "MODEM 3\tUnit Fault\n") elif v[12] == 1: lienzo = (lienzo + "MODEM 3\tTX Traffic\n") elif v[13] == 1: lienzo = (lienzo + "MODEM 3\tRX Traffic\n") elif v[14] == 1: lienzo = (lienzo + "MODEM 3\tDeferred Alarm\n") hora = (str(datetime.datetime.now())) txt=open('historial.txt','r') lineas = txt.readlines() txt.close() print ('enmascarar3') print (enmascarar3) print ('v[11]') print (v[11]) pantalla.set(lienzo) principal.after(200, leerAlarmas) #elementos de la ventana: modem = Label(principal, text = 'Nro. Modem').pack() estado = Label(principal, text = 'Estado') w= Label(principal, textvariable=pantalla).pack(side=LEFT)#Texto de una línea que sirve de etiqueta para identificar otros widgets. Se puede insertar dentro de él una imagen. w= Label(principal, textvariable=enmascarar3).pack(side=RIGHT) w1= Checkbutton(principal, text= "Silenciar Modem 3", variable = enmascarar3, onvalue = 1, offvalue = 0, height=5, width = 20).pack()#pone variable enmascarar3 a 1 o a 0 botones= Frame(principal, bd=5, relief="groove").pack()#Se utiliza como contenedor para organizar otros widgets. b=Button(botones, text="Silenciar", bg="green", underline = 0, width=25, command=stopAlarm).pack(side=LEFT)#Mostrar botones en la aplicación. b=Button(botones, text="Alarmar", width=25 ,command=startAlarm).pack(side=RIGHT) alertar() leerAlarmas() principal.mainloop()