Thank you.  Is there a HOW-TO for doing that?  My initial guess is that I have 
to:

1. Download the QT source (I'll use Qt-win-opensource-4.7.2.-vs2008)
2: build the debug versions
3:  copy somewhere
4: edit my qt.conf located at c:\Python26

Is that right?



--- On Wed, 3/30/11, Erik Janssens <[email protected]> wrote:

From: Erik Janssens <[email protected]>
Subject: Re: [PySide] Some crashes using QTableWidget
To: "Keith Gunderson" <[email protected]>, [email protected]
Date: Wednesday, March 30, 2011, 2:17 PM

it might help to run QT in debug mode

the whole MVC stuff has a lot of asserts, so you might 
be informed earlier on on what goes wrong

On Wed, Mar 30, 2011 at 8:45 PM, Keith Gunderson <[email protected]> wrote:



Hello,

New PySide user here with an issue that my app/script crashes sometimes when 
QTableWidget.clear() is called.  It is reproducible but I can't understand why 
it crashes when it does.

The script fills the table with data from an array that meet some criteria.  I 
select a cell/ row and press a button that causes all the data from the 
selected row to be written to a file.  Then the table is cleared and re-filled 
with a new set of data.  If I select a certain cell from certain sets, the 
crash occurs.  But selecting the same cell in other sets doesn't cause the 
crash.  Selecting a different cell in the same row/ same set as 'crasher 
selection' can prevent the crash.  Crashes occur perhaps about 2% of the time.  
I can't understand why it occurs, but then again I know very little about Qt 
and its MVC
 classes.

Here is some code:

The window:

from PySide import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")

        MainWindow.resize(800, 600)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtGui.QWidget(self.centralwidget)

        self.verticalLayoutWidget.setGeometry(QtCore.QRect(170, 20, 160, 80))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout =
 QtGui.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setMargin(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.tableWidget = QtGui.QTableWidget(self.centralwidget)

        self.tableWidget.setGeometry(QtCore.QRect(10, 110, 781, 451))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)



The app:

def main():

    array1 = numpy.loadtxt(open("aa_count.csv"), delimiter=',', dtype={'names' 
:('dh', 'ds', 'count' ), 'formats': ('f4', 'f4', 'i4' )  }  )

    array2 = numpy.loadtxt(open("aa_full.csv"),
 delimiter=',', dtype={'names' :('id', 'dh', 'ds', 'name1', 'name2', 'name3', 
'name4' ), 'formats': ('i4', 'f4', 'f4', 'S2', 'S2', 'S2', 'S2' )  }  )


    writer1 = csv.writer(open("aa_prime.csv", "wb"), dialect = 'excel' )

    app = QApplication(sys.argv)
    frame = MainWindow(dataArray = array2, dataCounts = array1, 
outWriter=writer1)

    frame.show()
    

    app.exec_()
        


The Window Class


class MainWindow( QMainWindow, Ui_MainWindow):
    def __init__(self, parent= None, dataArray=None, dataCounts = None, 
outWriter = None):

        super( MainWindow,self).__init__(parent)
        self.setupUi(self)
        self.outWriter =
 outWriter
        self.dataArray = dataArray
        self.dataCounts = dataCounts
        self.dataCountRow = 0
        self.tableWidget.setColumnCount( 7  )

#filling the table

    def showGroup(self):

        self.tableWidget.clear()
        self.tableWidget.setHorizontalHeaderLabels( self.dataArray.dtype.names  
)

        dhval = self.dataCounts[self.dataCountRow ] ['dh']
        dsval = self.dataCounts[self.dataCountRow ] ['ds']
        activeRows =
 self.dataArray[ (self.dhs == dhval) * (self.dss == dsval)  ]
        self.rowNumber.setText( str( self.dataCountRow + 1 ) )
        irow = 0
        for rowX in activeRows:
            if not self.filterRow( rowX):

                irow += 1
        self.tableWidget.setRowCount( irow )
        irow = 0
        for rowX in activeRows:
            if not self.filterRow( rowX):
                self.tableWidget.setItem( irow,
 0,  QTableWidgetItem(self.tr(str( rowX[0]   ))) )
                self.tableWidget.setItem( irow, 1,  
QTableWidgetItem(self.tr(str( rowX[1]   ))) )

                self.tableWidget.setItem( irow, 2,  
QTableWidgetItem(self.tr(str( rowX[2]   ))) )

                self.tableWidget.setItem( irow, 3,  
QTableWidgetItem(self.tr(str( rowX[3]   ))) )

                self.tableWidget.setItem( irow, 4,  
QTableWidgetItem(self.tr(str( rowX[4]   ))) )

                self.tableWidget.setItem( irow, 5,  
QTableWidgetItem(self.tr(str( rowX[5]   ))) )

                self.tableWidget.setItem( irow, 6,  
QTableWidgetItem(self.tr(str( rowX[6]   ))) )

                irow += 1
       
 self.tableWidget.setFocus()


#getting the data out of the table
    def acceptSelectedRow(self):
        import pdb
#        pdb.set_trace()
        item = self.tableWidget.currentItem()

        if item and  item.row() >= 0:
            rowNum = item.row()
            rows = []
            for col in xrange(self.tableWidget.columnCount() ):
                it = self.tableWidget.item( rowNum, col)

                rows.append(  it.text() )
        if self.outWriter:
            self.outWriter.writerow ( rows )
        item = None
        self.nextGroup()



_______________________________________________

PySide mailing list

[email protected]

http://lists.pyside.org/listinfo/pyside




_______________________________________________
PySide mailing list
[email protected]
http://lists.pyside.org/listinfo/pyside

Reply via email to