[PyQt] memory corruption

lucaberto at libero.it lucaberto at libero.it
Thu Nov 27 07:52:03 GMT 2008


Hello again 

i copy here a part of the program that cause the memory corruption can you help me and telle wath is wrong?

# -*- coding: utf-8 -*-

"""
Module implementing Form.
"""

from PyQt4.QtGui import QWidget
from PyQt4.QtCore import pyqtSignature
from PyQt4 import *
from PyQt4 import QtNetwork
from PyQt4.QtNetwork import *
from PyQt4 import Qt
import sip
import sys
from threading import Thread
app = QtGui.QApplication(sys.argv)

from Ui_interfaccia import Ui_Form


class Form(QWidget, Ui_Form):
    """
    Class documentation goes here.
    """
    def __init__(self, parent = None):
        """
        Constructor
        """

        super(Form, self). __init__(parent)
        self.socket = QtNetwork.QTcpSocket()
        self.socket_one = QtNetwork.QTcpSocket()
        self.connect(self.socket,  QtCore.SIGNAL("connected()"), self.connessione)
        self.connect(self.socket,  QtCore.SIGNAL("readyRead()"), self.leggo_risposta)
        self.connect(self.socket, QtCore.SIGNAL("disconnected"), self.sconnesso)
        self.connect(self.socket, QtCore.SIGNAL("error(Qtcore.QAbsatctSocket::SocketError)"), self.server_errore)
        self.connect(self.socket_one,  QtCore.SIGNAL("connected()"), self.sono_connesso)
        self.connect(self.socket_one,  QtCore.SIGNAL("readyRead()"), self.inizio_a_sc)
        self.connect(self.socket_one, QtCore.SIGNAL("disconnected"), self.sconnesso)
        self.connect(self.socket_one, QtCore.SIGNAL("error(Qtcore.QAbsatctSocket::SocketError)"), self.server_errore)
        self.Gio = Giovanni()
        self.connect(self.Gio, QtCore.SIGNAL('finisched()'),  self.metto_tutti)
        self.lu = Luca()
        self.lu.socket_one = self.socket_one
        self.connect(self.lu, QtCore.SIGNAL('finisched()'),  self.finito)
        self.connect(self.lu, QtCore.SIGNAL('numero()'), self.barra_avanzamento)
        QWidget.__init__(self, parent)
        self.setupUi(self)
        self.listWidget_2.setHidden(True)
    
    @pyqtSignature("")
    def on_pushButton_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.label.setText('Connessione in corso....')
        app.processEvents()
        self.connetto()
        #raise NotImplementedError
        
    def cost_barra(self):
        self.pr_dl = QtGui.QProgressDialog('Stai Scaricando ' + self.filename,  'Annulla', 0, self.lunghezza)
        self.pr_dl.setWindowModality(QtCore.Qt.WindowModal)
        self.pr_dl.setWindowTitle('Only_Game_Dawnloader')
        app.processEvents()
        
    def barra_avanzamento(self):
        lg= self.lu.lungh_file#self.file_da_salvare.tell()
        self.pr_dl.setValue(lg)
        if self.pr_dl.wasCanceled():
            self.socket_one.close()
            self.pr_dl.close()
            self.lu.quit()
        if self.lunghezza == lg:
            self.socket_one.disconnectFromHost()
            self.lu.quit()
            self.pr_dl.close()
            
            
        
        
    def connetto(self):
        self.socket.connectToHost('irc.eden-irc.net', 6667)
        
    def finito(self):
        dlg_b = QtGui.QMessageBox.information(self,'Info', 'Download Completato','OK')
        self.socket_one.disconnectFromHost()
        
    def connessione(self):
        self.label.setText('Connesso')
        app.processEvents()
        self.socket.writeData('NICK ' + 'mynick' + '\n')
        self.socket.writeData('USER ' + ' mynick 192.168.1.111 192.168.1.111 mynick \n')
        
    def server_errore(self):
        self.label.clear()
        self.label.setText(QtCore.QString("Errore: %1").arg(self.socket.errorString()))
        app.processEvents()
        if self.socket.isOpen():
            self.socket.disconnectFromHost()
            
    def sconnesso(self):
        self.label.clear()
        self.label.setText('Connessione chiusa dal Server')
        app.processEvents()
        
    def leggo_risposta(self):
        import socket
        while self.socket.bytesAvailable()>0:
            cosa_leggo = self.socket.readData(1024)
            self.textEdit.append(cosa_leggo) 
            if 'PING' in str(cosa_leggo):
                frase_pong = ('PONG :' + cosa_leggo[6:-2]+'\n')
                self.textEdit.append(frase_pong)
                self.socket.writeData(frase_pong)
                app.processEvents()
            if 'All Slots Full' in str(cosa_leggo) :
                mess= QtGui.QMessageBox.question(self,'Rifletti',  'Se premi Si ti metti in coda ed aspetti il tuo turno, altimenti premi No e ti levi dalla coda e tenti un altro file', 'Si', 'No')
                if mess == 1:
                    self.socket.writeData(self.se_annullo)
                #app.processEvents()
            if 'DCC SEND' in str(cosa_leggo):
                val = str(cosa_leggo)
                n_porta = val.split(' ')
                porta = n_porta[-2]
                print porta
                ip = n_porta[-3]
                ip = socket.inet_aton(ip)
                ip_giusto = socket.inet_ntoa(ip)
                print ip_giusto
                filename = n_porta[-4]
                print filename
                self.lunghezza = int(n_porta[-1][:-3])
                print self.lunghezza
                spezzo_frase = self.frase.split(' ')
                self.socket.writeData('PRIVMSG '+ spezzo_frase[1]+' xdcc get '+ filename)
                self.lu.comandi = val
                self.lu.filename = filename
                self.lu.lunghezza = self.lunghezza
                self.provo_s(ip_giusto, filename, porta)
            if 'No such nick/channel' in str(cosa_leggo):
                dlg_b = QtGui.QMessageBox.information(self,'Info', 'Attualmente non sisponibile prova con uno + sotto','OK')
                
    def provo_s(self, ip_giusto, filename, porta):
        self.socket_one.connectToHost(ip_giusto,  int(porta))
        self.filename = filename
        self.file_da_salvare = open(filename, 'wb')
        self.lu.file_da_salvare = self.file_da_salvare
        
    def inizio_a_sc(self):
        self.lu.start()
    
    def sono_connesso(self):
        self.cost_barra()
        print 'connesso'
    
    def metto_tutti(self):
        self.listWidget.clear()
        self.listWidget_2.clear()
        mio_file = open('ri.txt', 'rb')
        luca_file = mio_file.readlines()
        for line in luca_file:
            self.listWidget.addItem(line[0:-2])
        mio_file.close()
        mio_file_scritt = open('me.txt',  'rb')
        luca_file_scritt = mio_file_scritt.readlines()
        for line in luca_file_scritt :
            self.listWidget_2.addItem(line[0:-2])
        mio_file_scritt.close()
        self.Gio.quit()
    
    def keyPressEvent(self,event):
        if event.key()==QtCore.Qt.Key_Return:
            self.ricerco()
        else:
            event.accept()
            
    def ricerco(self):
        da_ricercare =self.lineEdit.text()
        self.listWidget.clear()
        self.listWidget_2.clear()
        da_ricercare = str(da_ricercare).upper()
        mio_file = open('ri.txt', 'rb')
        luca_file = mio_file.readlines()
        mio_file_scritt= open('me.txt', 'rb')
        luca_file_scritt = mio_file_scritt.readlines()
        for a in range(len(luca_file)) :
            frase = luca_file[a].upper()
            if da_ricercare in(frase):
                self.listWidget.addItem(luca_file[a][0:-2])
                self.listWidget_2.addItem(luca_file_scritt[a][0:-2])
        mio_file.close()
        mio_file_scritt.close()
    
    @pyqtSignature("")
    def on_pushButton_5_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.ricerco()
    
    @pyqtSignature("")
    def on_pushButton_6_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.metto_tutti()
    
    
    @pyqtSignature("")
    def on_pushButton_2_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.identificazione()
    
    def identificazione(self):
        self.socket.writeData('nickserv identify password\n')
        self.textEdit.append('nickserv identify password\n')
        app.processEvents()
    
    @pyqtSignature("")
    def on_pushButton_3_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.mi_unisco()
        
    def mi_unisco(self):
        messaggio = 'join #only\n'
        self.textEdit.append(messaggio)
        self.socket.writeData(messaggio)
        app.processEvents()
    
    def saluto(self):
        ms_saluti = ('ciao a tutti\n')
        self.socket.writeData(ms_saluti)
        self.textEdit.append(ms_saluti)
        app.processEvents()
    
    @pyqtSignature("")
    def on_pushButton_4_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.Gio.start()
 
        
    
    @pyqtSignature("QModelIndex")
    def on_listWidget_doubleClicked(self, index):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.prendo_numero_frase()
        
    def prendo_numero_frase(self):
        quale = self.listWidget.currentRow()
        frase_da_mand = self.listWidget_2.item(quale)
        self.frase = str(frase_da_mand.text())
        self.invio_richiesta()
        
    def invio_richiesta(self):
        self.socket.writeData(self.frase+'\n')
        se_annullo = self.frase.split(' ')
        self.se_annullo = 'PRIVMSG '+ se_annullo[1]+ ' xdcc remove\n'
    
    @pyqtSignature("")
    def on_pushButton_7_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.prendo_numero_frase()
    
    
           
        
        
class Giovanni(QtCore.QThread):
    
    def run(self):
        self.parso_sito()
        self.emit(QtCore.SIGNAL("finisched()"))
        
    def parso_sito(self):
        from BeautifulSoup import BeautifulSoup
        import urllib,  codecs
        sito = urllib.urlopen('http://sito.eu/')
        esamino = BeautifulSoup(sito)
        luca = esamino.findAll('tr', align='center')
        #print luca
        lunghezza = len(luca)
        messaggio_per_scar = open('me.txt', 'wb', )
        file_ricerca = codecs.open('ri.txt', 'wb', 'ISO-8859-15', 'repalce')
        for dati in range(lunghezza):
            gino = luca[dati]
            test = gino.findAll(text=True)
            valori_a = gino.find("a")["onclick"].split("'")
            nome_boot = valori_a[1]
            frase_scar = 'PRIVMSG ' +  nome_boot+' xdcc send '+test[0]+'\r\n'
            messaggio_per_scar.write(frase_scar)
            nome = test[2]
            a = 3
            while len(nome) < 2:
                nome = test[a]
                a+=1
            frase_ric = nome+' '+test[1]+' '+test[0]+'\r\n'
            file_ricerca.write(frase_ric)
        messaggio_per_scar.close()
        file_ricerca.close()
    
     
class Luca(QtCore.QThread): 
    
    def __init__(self, parent = None):
        super(Luca, self). __init__(parent)
        self.lunghezza = ''
        self.file_da_salvare = ''
        self.socket_one = ''
 
    def run(self):
        self.lungh_file = 0  
        while self.lungh_file != self.lunghezza:
            if self.socket_one.bytesAvailable()>0:
                        data = self.socket_one.readData(1024)
                        self.file_da_salvare.write(data)
                        self.lungh_file = self.file_da_salvare.tell()
                        self.emit(QtCore.SIGNAL("numero()"))
        self.file_da_salvare.close()
        self.emit(QtCore.SIGNAL("finisched()"))


When i run the class Luca, sometimes not all the time the applecation close and generate the memory corruption

PS:i need that also the first socket works because if i never reply to the ping the connection is closed and for this reason i use the thread

Regards

Luca




More information about the PyQt mailing list