Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/10/2014, 13:43
carneiroesteves
 
Fecha de Ingreso: octubre-2014
Mensajes: 1
Antigüedad: 7 años
Puntos: 0
Checkbutton no modifica variable

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 original
  1. 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
  1. elif (data) == (14).to_bytes(1,byteorder='big'):
  2.                 if v[11] == 0:
  3.                         txt=open('historial.txt','a')
  4.                         txt.write(datetime.datetime.now().ctime())
  5.                         txt.write(': MODEM 3 Unit Fault \n')
  6.                         txt.close()
  7.                         if (enmascarar3 == 0): #AQUI ES DONDE VE PY_VAR1 (cuando deberia ser 1 o 0)
  8.                                 startAlarm()
  9.                         v[11] = 1 #print ("MODEM 3 \tUnit Fault")
  10.                         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
  1. import socket#              funcionalidad para recibir UDP
  2. import os #                 usaremos system para limpiar pantalla
  3. import time#                para delays
  4. import datetime#            para la fecha y hora
  5. import threading
  6. from tkinter import *
  7. import winsound
  8.  
  9. UDP_IP = "192.168.0.1"#    ip de host donde corre el software
  10. UDP_PORT = 5005#           verificar que sea el mismo puerto a donde envia el arduino
  11.  
  12. sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #crea un soket INET para IPV4 de UDP para enviar datagramas
  13. sock.bind((UDP_IP, UDP_PORT))
  14. 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]
  15.  
  16. var=1
  17.  
  18. principal = Tk()
  19. principal.minsize(800,600)
  20. principal.maxsize(800,600)
  21. principal.title("titulo----")
  22. pantalla=StringVar()
  23.  
  24. enmascarar3 = 0#variable a modificar con "enmascarar"
  25.  
  26. enmascarar6 = IntVar()
  27.  
  28. #recibe el texto de la alarma y suena
  29. def alertar():
  30.     if var:
  31.                
  32.         principal.bell()
  33.     principal.after(500, alertar)
  34.  
  35.  
  36. def stopAlarm():
  37.     global var
  38.     var=0
  39.    
  40.    
  41. def startAlarm():
  42.     global var
  43.     var=1
  44.    
  45. def leerAlarmas():
  46.         global enmascarar3
  47.  
  48.         lienzo = "" #variable para sumar los textos a mostrar
  49.          
  50.         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(...)
  51.     #                                   recvfrom(buffersize[, flags]) -> (data, address info)se crea buffer de 512 Kbytes, addr no importa para este caso
  52.     #                                   a continunacion segun los datos recibidos se setean las variables para cada estado de cada modem
  53.     #                                   int.to_bytes(length, byteorder, *, signed=False) "big" setea el bit mas significativo
  54.         if (data) == (2).to_bytes(1,byteorder='big'):
  55.                 if v[10] == 0:
  56.                         v[10] = 1#print("MODEM 3 \tOK")
  57.                         v[11] = 0
  58.                         v[12] = 0
  59.                         v[13] = 0
  60.                         v[14] = 0
  61.                         stopAlarm()
  62.         #                                      
  63.         elif (data) == (14).to_bytes(1,byteorder='big'):
  64.                 if v[11] == 0:
  65.                         txt=open('historial.txt','a')
  66.                         txt.write(datetime.datetime.now().ctime())
  67.                         txt.write(': MODEM 3 Unit Fault \n')
  68.                         txt.close()
  69.                         if (enmascarar3 == 0):
  70.                                 startAlarm()
  71.                         v[11] = 1 #print ("MODEM 3 \tUnit Fault")
  72.                         v[10] = 0
  73.  
  74.         elif (data) == (26).to_bytes(1,byteorder='big'):
  75.                 if v[12] == 0:
  76.                         txt=open('historial.txt','a')
  77.                         txt.write(datetime.datetime.now().ctime() )
  78.                         txt.write(': MODEM 3 TX Traffic \n')
  79.                         txt.close()
  80.                         if enmascarar3 == 0:
  81.                                 startAlarm()
  82.                         v[12] = 1 #print ("MODEM 3 \tTX Traffic")
  83.                         v[10] = 0
  84.  
  85.         elif (data) == (38).to_bytes(1,byteorder='big'):
  86.                 if v[13] == 0:
  87.                         txt=open('historial.txt','a')
  88.                         txt.write(datetime.datetime.now().ctime() )
  89.                         txt.write(': MODEM 3 RX Traffic \n')
  90.                         txt.close()
  91.                         if enmascarar3 == 0:
  92.                                 startAlarm()
  93.                         v[13] = 1 #print ("MODEM 3 \tRX Traffic")
  94.                         v[10] = 0
  95.  
  96.         elif (data) == (50).to_bytes(1,byteorder='big'):
  97.                 if v[14] == 0:
  98.                         txt=open('historial.txt','a')
  99.                         txt.write(datetime.datetime.now().ctime() )
  100.                         txt.write(': MODEM 3 Deferred Alarm \n')
  101.                         txt.close()
  102.                         if enmascarar3 == 0:
  103.                                 startAlarm()
  104.                         v[14] = 1 #print ("MODEM 3 \tDeferred Alarm")
  105.                         v[10] = 0
  106.  
  107.             #imprimimos los encabezados:
  108.  
  109.         lienzo = (lienzo + "Nro. Modem \tEstado\n")
  110. ###################################################
  111.         #ahora segun la variable que se encuentre en '1' va a ser lo que se imprima:
  112.         #sentencias para el MODEM Nro. 3:
  113.         if v[10] == 1:
  114.                
  115.                 lienzo = (lienzo + "MODEM 3\tOK\n")
  116.                 w = Label(principal, text="MODEM 3\tOK\n", bg="green", fg="black")
  117.                 w.pack()
  118.                
  119.         #--------------------------------------------------
  120.         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])):
  121.                
  122.                 lienzo = (lienzo + "MODEM 3\tMULTIPLES FALLAS!\n")
  123.                
  124.         elif v[11] and v[12] == 1:
  125.                
  126.                 lienzo = (lienzo + "MODEM 3\tUnit Fault - Tx Fault\n")
  127.                
  128.         elif v[11] and v[13] == 1:
  129.                
  130.                 lienzo = (lienzo + "MODEM 3\tUnit Fault - Rx Fault\n")
  131.                
  132.         elif v[11] and v[14] == 1:
  133.                
  134.                 lienzo = (lienzo + "MODEM 3\tUnit Fault - Deferred Alarm\n")
  135.                
  136.         elif v[12] and v[13] == 1:
  137.                
  138.                 lienzo = (lienzo + "MODEM 3\tRx Fault - Tx Fault\n")
  139.                
  140.         elif v[12] and v[14] == 1:
  141.                
  142.                 lienzo = (lienzo + "MODEM 3\tTx Fault - Deferred Alarm\n")
  143.                
  144.         elif v[13] and v[14] == 1:
  145.                
  146.                 lienzo = (lienzo + "MODEM 3\tRx Fault - Deferred Alarm\n")
  147.                
  148.         #--------------------------------------------------
  149.         elif v[11] == 1:
  150.                
  151.                 lienzo = (lienzo + "MODEM 3\tUnit Fault\n")
  152.                
  153.                
  154.         elif v[12] == 1:
  155.                
  156.                 lienzo = (lienzo + "MODEM 3\tTX Traffic\n")
  157.                
  158.         elif v[13] == 1:
  159.                
  160.                 lienzo = (lienzo + "MODEM 3\tRX Traffic\n")
  161.                
  162.         elif v[14] == 1:
  163.                
  164.                 lienzo = (lienzo + "MODEM 3\tDeferred Alarm\n")
  165.                
  166.         hora = (str(datetime.datetime.now()))
  167.         txt=open('historial.txt','r')
  168.         lineas = txt.readlines()
  169.         txt.close()
  170.  
  171.         print ('enmascarar3')
  172.         print (enmascarar3)
  173.         print ('v[11]')
  174.         print (v[11])
  175.        
  176.         pantalla.set(lienzo)
  177.         principal.after(200, leerAlarmas)
  178.  #elementos de la ventana:
  179. modem = Label(principal, text = 'Nro. Modem').pack()
  180. estado = Label(principal, text = 'Estado')
  181. 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.
  182. w= Label(principal, textvariable=enmascarar3).pack(side=RIGHT)
  183.  
  184. 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
  185.  
  186. botones= Frame(principal, bd=5, relief="groove").pack()#Se utiliza como contenedor para organizar otros widgets.
  187. b=Button(botones, text="Silenciar", bg="green", underline = 0, width=25, command=stopAlarm).pack(side=LEFT)#Mostrar botones en la aplicación.          
  188. b=Button(botones, text="Alarmar", width=25 ,command=startAlarm).pack(side=RIGHT)           
  189.  
  190. alertar()
  191. leerAlarmas()
  192. principal.mainloop()

Última edición por razpeitia; 16/10/2014 a las 17:02