Hi,

Some time ago I wrote a simple extension to the QStandardItemModel class that permits exclusive checkboxes in a treeview, ie. radio button behavior. This no longer works. If you check the first item, and then check one of the other, the first item it not unchecked. If you then navigate with the keyboard to the first item, it then becomes unchecked once you enter it (update/repaint not called?).

Strangely enough, for all the other N-1 items, the behavior is completely as expected.

Is this a Qt bug?

Minimal example included below:

import sys
from PyQt4 import QtCore, QtGui

class ExclusiveModel(QtGui.QStandardItemModel):
   def __init__(self, parent=None):
       QtGui.QStandardItemModel.__init__(self, parent)

   def setData(self, index, value, role=QtCore.Qt.EditRole):
       # Call base class method
return_value = QtGui.QStandardItemModel.setData(self, index, value, role)

       # Check if all other items must be unchecked
       if role == QtCore.Qt.CheckStateRole:
           changed_item = self.itemFromIndex(index)

           if changed_item.checkState() == QtCore.Qt.Checked:
               for row in range(self.rowCount()):
                   item = self.item(row, 0)
                   if item.text() != changed_item.text():
                       new_value = QtCore.QVariant(QtCore.Qt.Unchecked)
                       new_index = self.indexFromItem(item)
QtGui.QStandardItemModel.setData(self, new_index, new_value, role)

       return return_value
class View(QtGui.QTreeView):
   """
Class for defining a widget for holding the analysis and calculator views.
   """
   def __init__(self, parent=None):
       """
          Constructor.
       """
       # Call base class constructor
       QtGui.QTreeView.__init__(self, parent)

       # model
       self._model = ExclusiveModel()
       for value in ['Why', 'does', 'this', 'not', 'work']:
           item = QtGui.QStandardItem(value)
           item.setCheckable(True)
           self._model.appendRow([item])

       # Add the elements
       self.setModel(self._model)

if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)

   widget = View()
   widget.show()

   sys.exit(app.exec_())

--
+-------------------------------------------------------------+
| Mads Ipsen, Scientific developer                            |
+-------------------------------+-----------------------------+
| QuantumWise A/S               | phone:         +45-29716388 |
| Nørre Søgade 27A              | www:    www.quantumwise.com |
| DK-1370 Copenhagen K, Denmark | email:  [email protected] |
+-------------------------------+-----------------------------+


_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to