[Python-es] pyqt4+problema al cerrar una ventana

Pavel Daniel Lopez Castillo pdlopez en sc.uci.cu
Mar Dic 4 13:54:58 CET 2012


Jean Carlos ahi te pongo el formulario y el dialogo

El problema es cuando le doy a la x que esta en la ventana, pero igual probe poniendo un boton y lo conecte a una funcion cerrar y me da el mismo problema. Con las otras ventanas que tengo no habia tenido ese problema y no necesite utilizar ningun codigo, pienso que el problema sea otra cosa y no de utilizar el codigo que me pones, pero bueno en ese caso donde y como lo uso.

self.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"),self.cerrar)

def cerrar(self):
  self.close()


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

# Form implementation generated from reading ui file 'C:\bola\src\forms.ui\antes despues.ui'
#
# Created: Mon Dec 03 01:06:24 2012
#      by: PyQt4 UI code generator 4.2
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(QtCore.QSize(QtCore.QRect(0,0,500,424).size()).expandedTo(Form.minimumSizeHint()))
        Form.setMinimumSize(QtCore.QSize(500,424))
        Form.setMaximumSize(QtCore.QSize(500,424))

        self.gridlayout = QtGui.QGridLayout(Form)
        self.gridlayout.setMargin(9)
        self.gridlayout.setSpacing(6)
        self.gridlayout.setObjectName("gridlayout")

        self.tabWidget = QtGui.QTabWidget(Form)
        self.tabWidget.setObjectName("tabWidget")

        self.tab_3 = QtGui.QWidget()
        self.tab_3.setObjectName("tab_3")

        self.tableWidget = QtGui.QTableWidget(self.tab_3)
        self.tableWidget.setGeometry(QtCore.QRect(7,10,461,311))
        self.tableWidget.setObjectName("tableWidget")
        self.tabWidget.addTab(self.tab_3,"")

        self.tab_4 = QtGui.QWidget()
        self.tab_4.setObjectName("tab_4")

        self.tableWidget_2 = QtGui.QTableWidget(self.tab_4)
        self.tableWidget_2.setGeometry(QtCore.QRect(7,10,461,311))
        self.tableWidget_2.setObjectName("tableWidget_2")
        self.tabWidget.addTab(self.tab_4,"")
        self.gridlayout.addWidget(self.tabWidget,2,0,1,2)

        self.label = QtGui.QLabel(Form)
        self.label.setObjectName("label")
        self.gridlayout.addWidget(self.label,0,0,1,2)

        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setMaxLength(3)
        self.lineEdit.setObjectName("lineEdit")
        self.gridlayout.addWidget(self.lineEdit,1,0,1,1)

        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setObjectName("pushButton")
        self.gridlayout.addWidget(self.pushButton,1,1,1,1)

        self.retranslateUi(Form)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(QtGui.QApplication.translate("Form", "7 antes-despues", None, QtGui.QApplication.UnicodeUTF8))
        self.tableWidget.clear()
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), QtGui.QApplication.translate("Form", "Antes", None, QtGui.QApplication.UnicodeUTF8))
        self.tableWidget_2.clear()
        self.tableWidget_2.setColumnCount(0)
        self.tableWidget_2.setRowCount(0)
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), QtGui.QApplication.translate("Form", "Despues", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("Form", "Centena", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("Form", "Buscar", None, QtGui.QApplication.UnicodeUTF8))



if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())
**************************************************************************************************************************************************


*******************************Dialogo************************************************************************************************************
import sys
from PyQt4 import QtCore, QtGui
from forms.antesDespues import Ui_Form
from aplication.conexion2 import Conexion2
from datetime import date, timedelta
class AntesDespues(QtGui.QDialog):

    def __init__(self):
        QtGui.QDialog.__init__(self)
        #Inicializar el formulario
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.conn2 = Conexion2()
        self.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"),self.AntesDespues)

      
    def AntesDespues(self):
        try:
            numero = int(self.ui.lineEdit.text())
        except:
            QtGui.QMessageBox(" ","solo numeros",QtGui.QMessageBox.Information,1,0,0).exec_() 
            return 
        sql = "SELECT fecha, dia_noche FROM centenas WHERE centena='%d'" %(numero) 
        query2 = self.conn2.cursor.execute(sql) 
        datos = self.conn2.cursor.fetchall()
        filas=1
        #Cambio la cantidad de columnas de los TableWidget
        self.ui.tableWidget.setColumnCount(9)
        self.ui.tableWidget_2.setColumnCount(9)
        self.ui.tableWidget.setHorizontalHeaderItem(7, QtGui.QTableWidgetItem("Fecha"))
        self.ui.tableWidget.setHorizontalHeaderItem(8, QtGui.QTableWidgetItem("Horario"))
        self.ui.tableWidget_2.setHorizontalHeaderItem(7, QtGui.QTableWidgetItem("Fecha"))
        self.ui.tableWidget_2.setHorizontalHeaderItem(8, QtGui.QTableWidgetItem("Horario"))
        for row in datos:
           #Cambio la cantidad de filas de los TableWidget
           self.ui.tableWidget.setRowCount(filas)
           self.ui.tableWidget_2.setRowCount(filas)
           
           #Convierto a lista el string de la fecha
           fecha_list = str(row[0]).split('-') 
           
           #Convierto a objetos date cada una de las lista con los datos de las fechas 
           fecha_obj = date(int(fecha_list[0]), int(fecha_list[1]), int(fecha_list[2]))
           
           #Guardo en f el numero de la fila
           f=filas-1
           
           #Codigo para obtener las 5 centenas anteriores y siguientes y mostrarlas en los TableWidget
           fecha1 = str(fecha_obj - timedelta(days=1))
           fecha2 = str(fecha_obj - timedelta(days=2))
           fecha3 = str(fecha_obj - timedelta(days=3))
           fecha4 = str(fecha_obj - timedelta(days=4))
           fecha5 = str(fecha_obj - timedelta(days=5))
           fecha6 = str(fecha_obj - timedelta(days=6))
           fecha7 = str(fecha_obj - timedelta(days=7))
           
           fecha8 = str(fecha_obj + timedelta(days=1))
           fecha9 = str(fecha_obj + timedelta(days=2))
           fecha10 = str(fecha_obj + timedelta(days=3))
           fecha11 = str(fecha_obj + timedelta(days=4))
           fecha12 = str(fecha_obj + timedelta(days=5))
           fecha13 = str(fecha_obj + timedelta(days=6))
           fecha14 = str(fecha_obj + timedelta(days=7))
           
           lista_fechas1 = [fecha1, fecha2, fecha3, fecha4, fecha5, fecha6, fecha7]
           lista_fechas2 = [fecha8, fecha9, fecha10, fecha11, fecha12, fecha13, fecha14]
           for i in xrange(7):
               sql = "SELECT centena FROM centenas WHERE fecha='%s' AND dia_noche='%s'" %(lista_fechas1[i],row[1])  
               query2 = self.conn2.cursor.execute(sql) 
               centena = self.conn2.cursor.fetchall()
               newitem1 = QtGui.QTableWidgetItem(str(centena[0][0]))
               self.ui.tableWidget.setItem(f, i, newitem1)
               
               sql = "SELECT centena FROM centenas WHERE fecha='%s' AND dia_noche='%s'" %(lista_fechas2[i],row[1])  
               query2 = self.conn2.cursor.execute(sql) 
               centena = self.conn2.cursor.fetchall()
               newitem = QtGui.QTableWidgetItem(str(centena[0][0]))
               self.ui.tableWidget_2.setItem(f, i, newitem)
               
               self.ui.tableWidget.setColumnWidth(i,40)
               self.ui.tableWidget_2.setColumnWidth(i,40)
           
           #Creo los elementos para insertar en los TableWidget            
           newitem1 = QtGui.QTableWidgetItem(row[0])
           newitem2 = QtGui.QTableWidgetItem(row[1])
           
           #Pongo los elementos en el TableWidget
           self.ui.tableWidget.setItem(f, 7, newitem1)
           self.ui.tableWidget.setItem(f, 8, newitem2) 
           self.ui.tableWidget_2.setItem(f, 7, newitem1)
           self.ui.tableWidget_2.setItem(f, 8, newitem2) 
           
           self.ui.tableWidget.setColumnWidth(7,80)
           self.ui.tableWidget_2.setColumnWidth(7,80)
           self.ui.tableWidget.setColumnWidth(8,45)
           self.ui.tableWidget_2.setColumnWidth(8,45)
           
           #Aumento la cantidad de filas
           filas+=1





----- Mensaje original -----
De: "Jean Carlos Rodrìguez" <jeancarlosr_ve en yahoo.com>
Para: "La lista de python en castellano" <python-es en python.org>
Enviados: Lunes, 3 de Diciembre 2012 20:12:32
Asunto: Re: [Python-es] pyqt4+problema al cerrar una ventana





def closeEvent(self, event): 

reply = QtGui.QMessageBox.question(self, 'SALIR', 
_fromUtf8("¿Seguro deseas Salir?"), QtGui.QMessageBox.Yes | 
QtGui.QMessageBox.No, QtGui.QMessageBox.No) 


if reply == QtGui.QMessageBox.Yes: 
event.accept() 
# sys.exit(1) 
else: 
event.ignore() 





De: Pavel Daniel Lopez Castillo <pdlopez en sc.uci.cu> 
Para: python-es en python.org 
Enviado: Lunes, 3 de diciembre, 2012 4:52 P.M. 
Asunto: [Python-es] pyqt4+problema al cerrar una ventana 

Tengo una aplicación hecha con pyqt4.2 en la cual tengo un menú con varias funcionalidades, el problema es que cuando cierro la ventana que se abre al dar click en una de ella me sale un cartel con el siguiente error: 


La instruccion en "0x00000000" hace referencia a la memoria en "0x00000000". La memoria no se puede "read". 

Hagla clic en Aceptar para finalizar este programa 
Hagla clic en CANCELAR para finalizar este programa 


Que puede ser la causa de esto, si la funcionalidad me funciona bien 
_______________________________________________ 
Python-es mailing list 
Python-es en python.org 
http://mail.python.org/mailman/listinfo/python-es 
FAQ: http://python-es-faq.wikidot.com/ 



_______________________________________________
Python-es mailing list
Python-es en python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Más información sobre la lista de distribución Python-es