Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connecting QTableView selectionChanged signal produces segfault with PyQt

I have a QTableView in a PyQt application, and I want to keep track of when the selection changes. I've tried connecting the signal to a slot as follows (using the advice on this page:

self.view.selectionModel().selectionChanged.connect(self.selChanged)

where the slot it is connected to is defined as:

def selChanged(self, selected, deselected):
        print "Sel changed"

However, whenever I load the QMainWindow on which the QTableView resides, I get an immediate segmentation fault.

Am I doing something silly here?

like image 387
robintw Avatar asked Feb 10 '13 22:02

robintw


2 Answers

I was having a similar problem and the fix was here: PySide: Segfault(?) when using QItemSelectionModel with QListView

Namely, replace:

self.view.selectionModel().selectionChanged.connect(self.selChanged)

with two commands:

selectionModel = self.view.selectionModel()
selectionModel.selectionChanged.connect(self.selChanged)

Not sure why this works, frankly.

like image 130
eric Avatar answered Oct 12 '22 15:10

eric


This has been fixed now, it turned out that I was using an old version of Qt on that machine - which seemed to cause the crash.

The moral of the story is: if your code is crashing for no sensible reason, check all of your dependencies (in this case Qt and PyQt) are up-to-date.

like image 32
robintw Avatar answered Oct 12 '22 15:10

robintw