[PyQt] A list of checkboxes

eliben eliben at gmail.com
Wed May 13 04:30:55 BST 2009



David Boddie wrote:
> 
> On Tue May 12 19:20:14 BST 2009, eliben wrote:
> 
>> I want to display a QListView where each item is a checkbox with some
>> label. The checkboxes should be visible at all times. One way I can think
>> of is using a custom delegate and QAbstractListModel. Are there simpler
>> ways? Can you provide the simplest snippet that does this?
> 
> If you are writing your own model, just include the Qt.ItemIsUserCheckable
> flag in the return value from the flags() method, and ensure that you
> return
> a valid value for the Qt.CheckStateRole from the data() method.
> 
> If you use the QStandardItemModel class, include the
> Qt.ItemIsUserCheckable
> flag in those you pass to each item's setFlags() method, and set the check
> state for the Qt.CheckStateRole with its setData() method.
> 
> In an interactive Python session, type the following:
> 
>   from PyQt4.QtGui import *
> 
>   model = QStandardItemModel()
>   item = QStandardItem("Item")
>   item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
>   item.setData(QVariant(Qt.Checked), Qt.CheckStateRole)
>   model.appendRow(item)
> 
>   view = QListView()
>   view.setModel(model)
>   view.show()
> 
> David
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
> 
> 

David,

Thanks a lot for the reply. It works. For the record here's a smallish test
based on your code that creates several items with various check states:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from random import randint


app = QApplication(sys.argv)

model = QStandardItemModel()

for n in range(10):                   
    item = QStandardItem('Item %s' % randint(1, 100))
    item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
    
    check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked
    
    item.setData(QVariant(check), Qt.CheckStateRole)
    model.appendRow(item)

view = QListView()
view.setModel(model)

view.show()
app.exec_()


-- 
View this message in context: http://www.nabble.com/A-list-of-checkboxes-tp23507710p23514827.html
Sent from the PyQt mailing list archive at Nabble.com.



More information about the PyQt mailing list