Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - minak

#1
Hola estoy haciendo un pequeño programa en python que escucha un servidor mqtt y lo muestra en pantalla en el modo consola no tengo problema pero quise poner una gui con tkinter y no se como hacer que cuando el callback de mensaje recibido refresque un text que esta dentro de una clase que corresponde a la ventana principal. Me podéis ayudar a ver como puedo hacerlo por que es lo unico que me falta y no se me ocurre.

Ventana Principal
class MyApp:
   def __init__(self, parent):
       self.parent = parent  
       self.parent.protocol("WM_DELETE_WINDOW", self.on_closing) #Indicas que cuando presiones la x de cerrar ventana

       #Ventana principal
       root.title(proyect +" "+ version)                      
       root.resizable (True, True)
       root.iconbitmap('pyc.ico')
       #root.geometry ("650x400")
       root.config (bg="black",bd="10", relief ="sunken")

       ventanainfo = Frame()
       ventanainfo.grid()
       #ventanainfo.config (bg="white", width ="630", height ="380", bd="10", relief ="sunken", cursor ="pirate")
       ventanainfo.config (bg="white", bd="10", relief ="sunken", cursor ="arrow")


       #Configuracion de elemetos sobre frame Principal
       #*****PANTALLA LOG**************
       pantallaLOG = Text(ventanainfo, width ="90", height ="18")
       pantallaLOG.grid (row="0", column ="0", padx=1,pady=1,rowspan=4)
       scrollLog = Scrollbar (ventanainfo, command = pantallaLOG.yview)
       scrollLog.grid (row="0", column ="1", padx=1,pady=1, sticky = "nSeW",rowspan=4)
       pantallaLOG.config (yscrollcommand = scrollLog.set)

       pantallaLOG.insert(INSERT, 'test.\n')
       global ultimoMensaje;
       pantallaLOG.insert(INSERT, ultimoMensaje +'\n')


Callback
def on_message(client, userdata, msg):
   
   global ultimoMensaje
   ultimoMensaje = (time.strftime("%d/%m/%y - %H:%M -> ")+"[" + msg.topic+"] "+str(msg.payload))
   print (ultimoMensaje)

Dejo el main desde el que se inician callback
if __name__ == "__main__":

    openConfig(); 

    myIP = getipextern()
    print (myIP)

    client = mqtt.Client(client_name)
    client.username_pw_set(user, password=password)
    client.on_connect = on_connect
    client.on_disconnect = on_disconnect
    client.on_publish = on_publish
    client.on_message = on_message
    #client.on_log = on_log              # Descomenta para activar el modo Debug
    client.on_subscribe = on_subscribe   # Callback de una supcripcion

    #Comienzo del GUI de usuario

    root = tk.Tk()
    app = MyApp(root)
   
    #****Bucle**********************
    root.mainloop()

    #*** Salida del programa
    print("Cerrando...")
    try:
        client.disconnect()
        client.loop_stop()
    except:
        print ("No procede desconectar")
    print ("Adios")


El programa es mucho mas grande pero es que son mas de 500 lineas para ponerlo aqui. Lo que quiero conseguir es que ese cuadro sea como una consola donde se vaya escribiendo lo que pasa en el programa.
Muchas gracias
#2
Bueno mi problema no es en c++ si no en Arduino pero como el lenguaje que más se parece es a c++ lo pongo aquí haber si me podéis ayudar. El problema recae en que mi nivel de programación no es muy alto y que nunca me han llegado enseñado hacer programas estructurados en diferentes ficheros cpp. Ahora quiero aprender y no encuentro muy bien cómo se hace. El caso que quiero que el ino llame a funciones que están en diferentes .cpp y hasta hay bien pero cuando es un cpp el que llama a otra función declarada en otro cpp me da error que el compilador en ese cpp no lo tiene declarado. el caso como puedo hacer que lo que se declare en el programa principal este donde esté se le pueda llamar desde cualquier parte. Muchas gracias.

Pd: Es decir tengo el ino y hay declaro hago el include a wifi.h y datos.h pero claro desde la parte del codigo del cpp de wifi.h no puedo llamar a funciones de datos.h.
#3
Bueno ya consegui crackear cosas en .net. Pero ya cuando encuentro algo en c++ la cosa se me ponen dificil.lograr hacer el resto. No son programas dificiles pienso solo son que no tengo el sufiente conocimiento aun.

Bueno el programa es el siguiente:
TrainController™ Gold Version 8.0
http://www.freiwald.com/pages/download.htm

El caso os cuento lo que hice hasta ahora:
- Descomprimi el ejecutable haber si evitaba instalar cosas en el PC.
Y asi es descomprimido y portable esta la aplicacion.
- Ahora hojeo el programa y esta c++.
- Entiendo que la libreria railres32.dll es los textos y las ventanas emergente.
- Lo abro con Resource hacker y compruebo que la ventana inicial donde pide el serial
31103:1031 y la cadena string que me da cuando inserto el codigo erroneo es
2000:1031 - 31992 "The code hasn't been entered correctly.\nPlease check the code once more, correct the code and try once more."

Es decir llevo poco, ahora ando analizando ollydbg y w32 haber si consigo algo pero creo que no se usarlos muy bien y doy palos de ciego.

Alguna pequeña ayudar para continuar.