Hola amigo carbon, si cláro te mostraré el código :)
Antes te quiero comentar que he utilizado la clase de threading.Thread y lo mismo me sigue pasando.
La ventana del programa tiene una clase y ahora he creado otra clase más en mi código "class Soket(threading.Thread):", pero ni siquiera aun así funciona, lo mismo se clave, he dejado de usar el Gauge, así que sólo tendría que agregar los Items en el panel de ListCtrl, pero al comprobar una conexión se clava, queda como cargando, pero me clava la ventana y no se puede ver los puertos ni abiertos ni cerrados.
Yo pensaba que, como la conexión socket estaba dentro del bucle (MainLoop()) de la clase de la ventana eso era el problema, ya que estaba metido ahí adentro, entónces decidí sacarlo de ahí, sacar a la función que hace la comprobación de puertos, por lo que habría 2 clases separadas, heredé los valores de las variables, osea los argumentos y ahora se conservan los valores, en la otra clase del socket, sin embargo se sigue clavando. Aquí te dejo la clase del socket:
Código Python:
Ver originalclass Soket(threading.Thread):
def __init__(self, Incremento, IncNums, Total, ComprobarIP, gauge, Listado, COMPPUERTOS):
threading.Thread.__init__(self)
self.INCREMENTO = Incremento
self.INCNUMS = IncNums
self.TOTAL = Total
self.COMPROBARIP = ComprobarIP
self.BarraProgreso = gauge
self.Listado = Listado
self.PUERTOS = COMPPUERTOS
self.lalas()
def lalas(self):
if self.INCREMENTO < self.TOTAL:
try:
self.puertito = int(self.PUERTOS[self.INCREMENTO])
Conexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Conexion.connect((self.COMPROBARIP, self.puertito))
#print "Puerto abierto"
self.INCREMENTO += 1
self.INCNUMS += 1
Conexion.close()
self.Listado.InsertStringItem(0, "hola")
self.Listado.SetStringItem(0, 1, "hola")
self.Listado.SetStringItem(0, 2, "hola")
self.Listado.SetStringItem(0, 3, "hola")
self.lalas()
except:
self.puertito = int(self.PUERTOS[self.INCREMENTO])
#print "Puerto cerrado"
self.INCREMENTO += 1
self.INCNUMS += 1
self.Listado.InsertStringItem(0, "hola")
self.Listado.SetStringItem(0, 1, "hola")
self.Listado.SetStringItem(0, 2, "hola")
self.Listado.SetStringItem(0, 3, "hola")
self.lalas()
Y la función que llama a esta clase es esta (la función que está dentro de clase
wx.Frame):
Código Python:
Ver originaldef Escaneo(self, event):
ValorIngresado = self.CajaPuertos.GetValue()
IPIngresada = self.CajaIP.GetValue()
ValorIngresado = ValorIngresado.replace("0", "").replace("1", "").replace("2", "").replace("3", "").replace("4", "").replace("5", "").replace("6", "").replace("7", "").replace("8", "").replace("9", "").replace(" ", "")
if ValorIngresado == "" and IPIngresada.count(".") == 3:
Incremento = 0
IncNums = 0
Total = self.CajaPuertos.GetValue().count(" ")
Total += 1
ComprobarIP = self.CajaIP.GetValue()
Panel_Gauge = wx.Panel(self, -1, pos=(22, 315), size=(520,25))
Gauge_BoxSizer = wx.BoxSizer(wx.HORIZONTAL)
self.Gauge = wx.Gauge(Panel_Gauge, range=Total, size=(520,25))
Gauge_BoxSizer.Add(self.Gauge, proportion=1, flag=wx.ALIGN_CENTER)
gauge = self.Gauge
Listado = self.Lista
self.ComprobarPuertos = self.CajaPuertos.GetValue()
self.ComprobarPuertos = self.ComprobarPuertos.split(" ")
COMPPUERTOS = self.ComprobarPuertos
prueba = Soket(Incremento, IncNums, Total, ComprobarIP, gauge, Listado, COMPPUERTOS)
prueba.start()
Bueno la palabra "hola" jajaja es sólo para probar si el programa es capaz de escribir algún texto en el ListCtrl.
Bueno amigos espero que me ayuden por favor.
Les agradezco, muchas gracias!!
Buena suerte!! Nos vemos!