I don't have debuggin symbols installed, but I am consistently getting
a seg fault after calling the python slot connected to SIGNAL('PyObject
*') from a QWidget subclass. I am usually passing a python string with
the signal, but if I pass None instead, it doesn't crash. I have a
button group emitting clicked(QAbstractButton *), which emits this
signal.<br>
<br>
the connecting code is as follows (sorry for the length), good luck:<br>
<br>
<br>
import os<br>
from PyQt4.QtCore import QObject, SIGNAL<br>
from PyQt4.QtGui import QPushButton, QApplication, QWidget, QHBoxLayout<br>
from PyQt4.QtGui import QButtonGroup, QPalette, QColor<br>
<br>
# ~/.pksampler<br>
PATCH_DIR = os.path.join(os.environ['HOME'], '.pksampler')<br>
LAYERS = ['bass', 'drums', 'lead', 'misc', 'pads']<br>
<br>
<br>
def find_patches():<br>
    patches = [i for i in os.listdir(PATCH_DIR)<br>
              
if os.path.isdir(os.path.join(PATCH_DIR, i))]<br>
    return patches<br>
<br>
<br>
def extension(fpath):<br>
    """ return the extension of fpath, not including the . """<br>
    return fpath[fpath.rfind('.')+1:]<br>
<br>
<br>
def can_open(fpath):<br>
    exists = os.access(fpath, os.R_OK)<br>
    supported = extension(fpath) in ('wav', 'aiff')<br>
    return exists and supported<br>
<br>
<br>
class PatchSelector(QWidget):<br>
    def __init__(self, parent=None):<br>
        QWidget.__init__(self, parent)<br>
        Layout = QHBoxLayout(self)<br>
<br>
        self.group = QButtonGroup(self)<br>
<br>
        self.buttons = []<br>
        for index, name in enumerate(find_patches()):<br>
            button = QPushButton(name)<br>
<br>
            palette = QPalette(button.palette())<br>
            palette.setColor(QPalette.Button,<br>
                            
QColor('grey').dark(150))<br>
            button.setPalette(palette)<br>
<br>
            self.group.addButton(button)<br>
            self.group.setId(button, index)<br>
            self.buttons.append(button)<br>
            Layout.addWidget(button)<br>
<br>
        QObject.connect(self.group,<br>
                       
SIGNAL('buttonClicked(QAbstractButton *)'),<br>
                       
self.clicked)<br>
<br>
    def clicked(self, button):<br>
        name = str(button.text())<br>
        self.selected = name<br>
        self.emit(SIGNAL('selected(PyObject *)'), name)<br>
        #self.emit(SIGNAL('selected()'))<br>
<br>
<br>
class Patch:<br>
<br>
    name = None<br>
    layers = None<br>
<br>
    def __init__(self, name):<br>
        <a href="http://self.name">self.name</a> = name<br>
        self.homedir = os.path.join(PATCH_DIR, name)<br>
        self.layers = {}<br>
<br>
        for layer in LAYERS:<br>
            self.layers[layer] = []<br>
            lpath = os.path.join(self.homedir, layer)<br>
<br>
<br>
            if os.path.isdir(lpath):<br>
                self.layers[layer] = []<br>
                for fname in os.listdir(lpath):<br>
                   
print 'LPATH',lpath<br>
<br>
              
# THIS CRASHES IF I ENABLE THESE **************************8<br>
<br>
               
#    fpath = os.path.join(lpath, fname)<br>
               
#    print 'FPATH',fpath<br>
               
#    #if can_open(fpath):<br>
               
#    #    self.layers[layer].append(fpath)<br>
<br>
if __name__ == '__main__':<br>
    import sys<br>
    def selected(name):<br>
        print 'Selected:',name, Patch(name)<br>
    a = QApplication(sys.argv)<br>
    w = PatchSelector()<br>
    QObject.connect(w, SIGNAL('selected(PyObject *)'), selected)<br>
    #QObject.connect(w, SIGNAL('selected()'), selected)<br>
    w.show()<br>
    a.exec_()<br>
<br clear="all"><br>-- <br>Patrick Kidd Stinson<br><a href="http://www.patrickkidd.com/">http://www.patrickkidd.com/</a><br><a href="http://pkaudio.sourceforge.net/">http://pkaudio.sourceforge.net/</a><br><a href="http://pksampler.sourceforge.net/">
http://pksampler.sourceforge.net/</a>