|
Mostrar Mensajes
|
Páginas: [1]
|
1
|
Programación / Scripting / Re: Refresco tkinter de texto recibido en un callback
|
en: 11 Mayo 2018, 13:48 pm
|
Encontre una solucion pero no la entiendo y no es la mejor opcion porque me crea una ventana trasera que entiendo que es para hacer un bucle de refresco el caso que pongo lo que modifique. Esta parte no entiendo porque se tiene que hacer asi pero si no lo hago asi after no me deja usarla dentro de la funcion. class MyApp(tk.Tk): def __init__(self, parent, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs)
y añado esta funcion def update_logtext(self): if (ultimoMensaje!=""):
global ultimoMensaje; self.pantallaLOG.insert(INSERT, ultimoMensaje +'\n') ultimoMensaje =""
self.after(1000, self.update_logtext)
Ahora mientras encuentro otra solucion voy a ver si consigo que la ventana secundaria que se crea sea invisible. PD : Hecho invisible pero no comprendo muy bien todo esto que hize class MyApp(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self) Os pongo el codigo del que saque la solucion por si alguien lo quiere : import Tkinter as tk import time
class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.clock = tk.Label(self, text="") self.clock.pack()
# start the clock "ticking" self.update_clock()
def update_clock(self): now = time.strftime("%H:%M:%S" , time.gmtime()) self.clock.configure(text=now) # call this function again in one second self.after(1000, self.update_clock)
if __name__== "__main__": app = SampleApp() app.mainloop()
|
|
|
2
|
Programación / Scripting / Refresco tkinter de texto recibido en un callback
|
en: 11 Mayo 2018, 11:58 am
|
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
|
|
|
3
|
Programación / Programación C/C++ / Re: Problema de declaración de funciones externas al fichero cpp
|
en: 23 Marzo 2018, 19:13 pm
|
Contestándote al mensaje vi el error, que tonto es que cuando fragmente el código por módulos he dejado restos y cambie mucho el funcionamiento de la parte de lectura y escritura para adaptarlo a un futuro implementar SD o otros tipos de almacenamiento y la había liado en la llamada a las funciones. Codigo compilado aunque no se si funciona no dispongo aquí ningún Wemos(Aprox. ARDUINO) para comprobarlo.
Estoy haciendo mi propio programa principalmente para la placa Sonoff y otros dispositivos.
Muchisimas gracias Kenji-chan.
|
|
|
4
|
Programación / Programación C/C++ / Re: Problema de declaración de funciones externas al fichero cpp
|
en: 22 Marzo 2018, 11:13 am
|
Que mal eso lo tengo hecho y no hace caso, creo que tiene que ver porque en cada header /***********************************************************************************************************************************/ /* Modulo de lectura/escritura en la eeprom */ /* Soporte EEPROM V_171225.0 */ /* */ /***********************************************************************************************************************************/
#ifndef SoporteEEPROM_H #define SoporteEEPROM_H
#include <ESP8266WiFi.h> //Libreria necesaria para el ESP8266 #include <EEPROM.h> //Libreria para el uso de la EEPROM
#include "Setting.h"
void setupEEPROM (); // Setup EEPROM extern void grabarEEPROM(int, String); //ARG int, ADDR String Datos extern String leerEEPROM(int); //ARG int, ADDR
#endif //__SoporteEEPROM_H Y el header del otro implicado es el siguiente /***********************************************************************************************************************************/ /* Modulo reposable de la comunicacion Wifi */ /* ModuloComunicacionWifi V_171214.0 */ /* Modulo reposable de la comunicacion Wifi, este modulo regula la comunicacion wifi, habilita un modo programacion y el modo */ /* OTA para la actualizacion a distancia. /***********************************************************************************************************************************/
#ifndef ComunicacionWIFI_H #define ComunicacionWIFI_H
#include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266WiFi.h> #include <ESP8266mDNS.h> //Manejo de DNS Multicast DNS #include <WiFiUdp.h> //Manejo de UDP #include <ArduinoOTA.h> //Manejo de OTA
#include "Setting.h" #include "SoporteEEPROM.h" //DECLARO EL HEADER DEL IMPLICADO EN EL PROBLEMA
/*******************************************************/ void setupModuloWifi(); void iniciandoWifi(); void modoSoftAP(); void modoConf(); void escanearRedes(); void leerConfSSID(); //DA PROBLEMAS NO ENCUENTRA LAS FUNCIONES void paginaConf(); void guardarConfWifi(); //DA PROBLEMAS NO ENCUENTRA LAS FUNCIONES void getUpdateOTA(); void testConexion();
#endif //__ComunicacionWIFI_H
Lo que correspondería en main también incluyo solo la parte implicada en las declaraciones de las partes. //#include <Wire.h> //Manejo del I2C //#include <ESP8266WiFi.h>
//#include "ComunicacionWIFI.h" #include "Globales.h" //Variables globales #include "Setting.h" //Activacion de los diferentes funciones
#ifdef TOOLS-I2C_ENABLE #include "ToolI2C.h" #endif //FIN
#ifdef DISPLAY-OLED_ENABLE #include "PantallaOLED.h" #endif //FIN
#ifdef SENSOR-HUMD-TEMP_ENABLE #include "SoporteSHT30.h" #endif //FIN
#ifdef SUPPORT-EEPROM_ENABLE #include "SoporteEEPROM.h" #endif
#ifdef SUPPORT-WIFI #include "ComunicacionWIFI.h" #endif
No tengo problemas para usar las funciones sobre el main pero sobre otro fichero no los encuentra
|
|
|
5
|
Programación / Programación C/C++ / Problema de declaración de funciones externas al fichero cpp
|
en: 21 Marzo 2018, 22:23 pm
|
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.
|
|
|
7
|
Programación / Ingeniería Inversa / Re: Un poco de guia para aprender a crackear un programa c++
|
en: 15 Agosto 2017, 22:51 pm
|
He cogido todos vuestros comentarios, empeze haciendome el curso de ricardo y como los crackme me los salto casi sin terminar las lecciones practico con el programa que puse arriba. Pero mientras los crackme no se resisten el otro no. Pero aun tengo mucho que leer de los tutoriales. si usas telegram, en una de esas puedes conocer un poco mas el tema de tener al alcance hasta hablar con ricardonarvaja.. en lo personal, no es engargolar o juntar mas cursos, sino practicarlos y leerlos, hoy en dia practico con x64dbg/x32dbg y no tiene nada que envidiarle a ollydbg, ademas hay tutoriales nuevos para usar IDA estoy seguro que lo lograrás una vez logres entender un poco mas sobre lo que haces Saludos Apuromafo pd:la clave no es encontrar los strings, sino entender donde los crea, como se pueden evitar o que cosas se pueden digirir mejor No uso telegram pero me estas tentando a ponermelo xD. Me baje x64dbg/x32dbg para ver si me gusta mas que el ollydbg. Si llevo dias intentando encontrar desde donde se le llaman pero me cuesta porque no lo consigo. Localice en la pila los string pero no quien les llama en el programa. Porque todo eso corre en API y bueno ahora estoy intentando entender bien el capitulo 9 por que habla de las API y el capitulo 12 ventanas del curso de ricardo Muchas gracias a todos
|
|
|
8
|
Programación / Ingeniería Inversa / Un poco de guia para aprender a crackear un programa c++
|
en: 10 Agosto 2017, 21:30 pm
|
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.htmEl 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.
|
|
|
|
|
|
|