[PyQt] button delegate in a tableview

Erik Janssens Erik.Janssens at conceptive.be
Thu Nov 8 17:09:52 GMT 2012


Hi Chris,

I'm not sure if this can be fixed, maybe you can ask this
on the Qt info mailing list.  If it can be fixed, I'm interested
in the solution ;)

What happens is, when the TableWidget receives a click, it
creates an editor, but the editor has not yet received the
click.   That is perfect in most cases, but in case you draw
a button it isn't.

Cheers,

Erik


On Wednesday, November 07, 2012 02:50:17 PM Cristobal Infante wrote:

Hi Eric,

Thanks for the tip, I've managed to get my button inside my tableview.

There is only one thing that bothers me, not sure if it is a limitation or 
something I can fix.

To be able to press a button, I need to "activate" the containing cell with a 
click. 
Once the cell is active I can press the button. This could become confusing 
for your average user.

Is this fixable?

Best,
Cris





On 6 November 2012 22:05, <Erik.Janssens at conceptive.be> wrote:

The delegate itself can only paint, it cannot react to
clicks, you should implement the createEditor method,
the editor then reacts to clicks
 
On Tuesday, November 06, 2012 09:59:03 PM Cristobal Infante wrote:

Hi,


I am trying to embed a button per row inside a tableview. My botton are 
drawing correctly as delegates but are not reacting to any clicks. 


Should I be setting flags for this column? so far I have something like:



 if index.column() == 14: 
        flags |=  QtCore.Qt.ItemIsSelectable  | QtCore.Qt.ItemIsUserCheckable | Qt.ItemIsEnabled 
    return flags     




This is my delegate, but how do I make the button react to clicks?


Thanks,
cris






class AButton(QtGui.QStyledItemDelegate): 
mouse_isPressed = False 


def __init__(self, parent = None): 
    QtGui.QStyledItemDelegate.__init__(self, parent) 


def boundingRect(self): 
    return QtCore.QRectF(0, 0, 40, 40) 


def paint(self, painter, option, widget = 0): 
    opt = QtGui.QStyleOptionButton() 


    opt.state = ((QtGui.QStyle.State_Sunken if self.mouse_isPressed else QtGui.QStyle.State_Raised) | QtGui.QStyle.State_Enabled) 
    opt.text = self.text() 
    opt.icon = self.icon() 
    opt.rect = option.rect 
    opt.palette = option.palette 
    QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_PushButton, opt, painter) 


def text(self): 
    return QtCore.QString("hi") 


def icon(self): 
    return QtGui.QIcon() 


def mousePressEvent(self, event): 
    self.mouse_isPressed = True 
    print "HELLO" 
    self.update() 


def mouseReleaseEvent(self, event): 
    self.mouse_isPressed = False 
    self.update() 




_______________________________________________
PyQt mailing list    PyQt at riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20121108/80aa83bc/attachment.html>


More information about the PyQt mailing list