Antes de empezar quiero decir que tengo cero conocimientos de programacion, este es mi primer programa y lo fui haciendo investigando...
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 originalw1= 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 originalelif (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 originalimport 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()