Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/03/2014, 15:01
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con ventana wxPython, se traba al comprobar conexiones sockets

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 original
  1. class Soket(threading.Thread):
  2.     def __init__(self, Incremento, IncNums, Total, ComprobarIP, gauge, Listado, COMPPUERTOS):
  3.         threading.Thread.__init__(self)
  4.         self.INCREMENTO = Incremento
  5.         self.INCNUMS = IncNums
  6.         self.TOTAL = Total
  7.         self.COMPROBARIP = ComprobarIP
  8.         self.BarraProgreso = gauge
  9.         self.Listado = Listado
  10.         self.PUERTOS = COMPPUERTOS
  11.         self.lalas()
  12.     def lalas(self):
  13.         if self.INCREMENTO < self.TOTAL:
  14.             try:
  15.                 self.puertito = int(self.PUERTOS[self.INCREMENTO])
  16.                 Conexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  17.                 Conexion.connect((self.COMPROBARIP, self.puertito))
  18.                 #print "Puerto abierto"
  19.                 self.INCREMENTO += 1
  20.                 self.INCNUMS += 1
  21.                 Conexion.close()
  22.                 self.Listado.InsertStringItem(0, "hola")
  23.                 self.Listado.SetStringItem(0, 1, "hola")
  24.                 self.Listado.SetStringItem(0, 2, "hola")
  25.                 self.Listado.SetStringItem(0, 3, "hola")
  26.                 self.lalas()
  27.             except:
  28.                 self.puertito = int(self.PUERTOS[self.INCREMENTO])
  29.                 #print "Puerto cerrado"
  30.                 self.INCREMENTO += 1
  31.                 self.INCNUMS += 1
  32.                 self.Listado.InsertStringItem(0, "hola")
  33.                 self.Listado.SetStringItem(0, 1, "hola")
  34.                 self.Listado.SetStringItem(0, 2, "hola")
  35.                 self.Listado.SetStringItem(0, 3, "hola")
  36.                 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 original
  1. def Escaneo(self, event):
  2.         ValorIngresado = self.CajaPuertos.GetValue()
  3.         IPIngresada = self.CajaIP.GetValue()
  4.         ValorIngresado = ValorIngresado.replace("0", "").replace("1", "").replace("2", "").replace("3", "").replace("4", "").replace("5", "").replace("6", "").replace("7", "").replace("8", "").replace("9", "").replace(" ", "")
  5.         if ValorIngresado == "" and IPIngresada.count(".") == 3:
  6.             Incremento = 0
  7.             IncNums = 0
  8.             Total = self.CajaPuertos.GetValue().count(" ")
  9.             Total += 1
  10.             ComprobarIP = self.CajaIP.GetValue()
  11.             Panel_Gauge = wx.Panel(self, -1, pos=(22, 315), size=(520,25))
  12.             Gauge_BoxSizer = wx.BoxSizer(wx.HORIZONTAL)
  13.             self.Gauge = wx.Gauge(Panel_Gauge, range=Total, size=(520,25))
  14.             Gauge_BoxSizer.Add(self.Gauge, proportion=1, flag=wx.ALIGN_CENTER)
  15.             gauge = self.Gauge
  16.             Listado = self.Lista
  17.             self.ComprobarPuertos = self.CajaPuertos.GetValue()
  18.             self.ComprobarPuertos = self.ComprobarPuertos.split(" ")
  19.             COMPPUERTOS = self.ComprobarPuertos
  20.             prueba = Soket(Incremento, IncNums, Total, ComprobarIP, gauge, Listado, COMPPUERTOS)
  21.             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!