[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