[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: [PyQt] Prevent loading column when checkstate alone changed in QColumnView
From: Rathinam Signup <tfa.signup.test () gmail ! com>
Date: 2017-02-23 10:57:03
Message-ID: CAPzkV1xeA8dV0uTLpt9dZ1d1NkYZ9rRFyp2p166_qEgRbiAQrg () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
I've created a columnview with checkboxes. However whenever I check or
uncheck an item, next column is loaded automatically. I don't want to load
the next column when the checkbox state changed. I want it to be shown only
when the particular row is selected/clicked.
In my program I implemented QAbstractItemModel. For an example I'm using
QFileSystemModel here
from PyQt4 import QtCore, QtGui
> import os
> try:
> _fromUtf8 = QtCore.QString.fromUtf8
> except AttributeError:
> def _fromUtf8(s):
> return s
> try:
> _encoding = QtGui.QApplication.UnicodeUTF8
> def _translate(context, text, disambig):
> return QtGui.QApplication.translate(context, text, disambig,
> _encoding)
> except AttributeError:
> def _translate(context, text, disambig):
> return QtGui.QApplication.translate(context, text, disambig)
> class MyModel(QtGui.QFileSystemModel):
> def __init__(self):
> super().__init__()
> self.checkedIndexes = {}
> self.parentChecked=False
>
> def flags(self,index):
> flags=super().flags(index)|QtCore.Qt.ItemIsUserCheckable
> return flags
>
> def checkState(self, index):
> if index in self.checkedIndexes:
> return self.checkedIndexes[index]
> else:
> return QtCore.Qt.Checked
>
> def data(self, index, role=QtCore.Qt.DisplayRole):
> if role == QtCore.Qt.CheckStateRole:
> if index.column() == 0:
> return self.checkState(index)
> else:
> return super().data(index, role)
>
> def setData(self, index, value, role):
> if (role == QtCore.Qt.CheckStateRole and index.column() == 0):
> self.checkedIndexes[index] = value
> self.dataChanged.emit(index,index)
> return True
>
> return super().setData(index, value, role)
>
> def hasChildren(self,index):
> hasChildren=super().hasChildren(index)
> path=super().filePath(index)
>
>
> dirIter=QtCore.QDirIterator(path,QtCore.QDir.AllDirs|QtCore.QDir.NoDotAndDotDot|QtCore.QDir.NoSymLinks)
> if dirIter.hasNext():
> return True
> else:
> return False
>
> return hasChildren
>
> class columnView(QtGui.QDialog):
> def __init__(self,parent=None):
> super().__init__(parent)
> self.ui = Ui_Dialog()
> self.ui.setupUi(self)
>
> self.model=MyModel()
>
> self.model.setFilter(QtCore.QDir.AllDirs|QtCore.QDir.NoDotAndDotDot|QtCore.QDir.NoSymLinks)
> path=os.path.expanduser("~")
> self.model.setRootPath(path)
> self.ui.columnView.setModel(self.model)
>
> self.ui.columnView.setRootIndex(self.model.index(path))
>
> self.show()
>
> class Ui_Dialog(object):
> def setupUi(self, Dialog):
> Dialog.setObjectName(_fromUtf8("Dialog"))
> Dialog.resize(596, 389)
> self.verticalLayout = QtGui.QVBoxLayout(Dialog)
> self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
> self.columnView = QtGui.QColumnView(Dialog)
> self.columnView.setObjectName(_fromUtf8("columnView"))
> self.verticalLayout.addWidget(self.columnView)
> self.horizontalLayout = QtGui.QHBoxLayout()
> self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
> spacerItem = QtGui.QSpacerItem(40, 20,
> QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
> self.horizontalLayout.addItem(spacerItem)
> self.closePushButton = QtGui.QPushButton(Dialog)
> self.closePushButton.setObjectName(_fromUtf8("closePushButton"))
> self.horizontalLayout.addWidget(self.closePushButton)
> self.verticalLayout.addLayout(self.horizontalLayout)
> self.retranslateUi(Dialog)
> QtCore.QMetaObject.connectSlotsByName(Dialog)
> def retranslateUi(self, Dialog):
> Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
> self.closePushButton.setText(_translate("Dialog", "Close", None))
>
> if __name__ == "__main__":
> import sys
> app = QtGui.QApplication(sys.argv)
> view = columnView()
> sys.exit(app.exec_())
Any help is appreciated.
[Attachment #5 (text/html)]
<div dir="ltr">I've created a columnview with checkboxes. However whenever I \
check or uncheck an item, next column is loaded automatically. I don't want to \
load the next column when the checkbox state changed. I want it to be shown only when \
the particular row is selected/clicked. <div><br></div><div>In my program I \
implemented QAbstractItemModel. For an example I'm using QFileSystemModel \
here</div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px \
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">from PyQt4 import \
QtCore, QtGui<br>import os<br>try:<br> _fromUtf8 = \
QtCore.QString.fromUtf8<br>except AttributeError:<br> def _fromUtf8(s):<br> \
return s<br>try:<br> _encoding = QtGui.QApplication.UnicodeUTF8<br> def \
_translate(context, text, disambig):<br> return \
QtGui.QApplication.translate(context, text, disambig, _encoding)<br>except \
AttributeError:<br> def _translate(context, text, disambig):<br> \
return QtGui.QApplication.translate(context, text, disambig)<br>class \
MyModel(QtGui.QFileSystemModel):<br> def __init__(self):<br> \
super().__init__()<br> self.checkedIndexes = {}<br> \
self.parentChecked=False<br> <br> def flags(self,index):<br> \
flags=super().flags(index)|QtCore.Qt.ItemIsUserCheckable<br> return \
flags<br> <br> def checkState(self, index):<br> if index in \
self.checkedIndexes:<br> return self.checkedIndexes[index]<br> \
else:<br> return QtCore.Qt.Checked<br> <br> def \
data(self, index, role=QtCore.Qt.DisplayRole):<br> if role == \
QtCore.Qt.CheckStateRole:<br> if index.column() == 0:<br> \
return self.checkState(index)<br> else:<br> return \
super().data(index, role)<br> <br> def setData(self, index, value, \
role):<br> if (role == QtCore.Qt.CheckStateRole and index.column() == \
0):<br> self.checkedIndexes[index] = value<br> \
self.dataChanged.emit(index,index)<br> return True<br> \
<br> return super().setData(index, value, role)<br> \
<br> def hasChildren(self,index):<br> \
hasChildren=super().hasChildren(index)<br> \
path=super().filePath(index)<br> <br> \
dirIter=QtCore.QDirIterator(path,QtCore.QDir.AllDirs|QtCore.QDir.NoDotAndDotDot|QtCore.QDir.NoSymLinks)<br> \
if dirIter.hasNext():<br> return True<br> else:<br> \
return False<br> <br> return hasChildren<br> \
<br>class columnView(QtGui.QDialog):<br> def __init__(self,parent=None):<br> \
super().__init__(parent)<br> self.ui = Ui_Dialog()<br> \
self.ui.setupUi(self)<br> <br> self.model=MyModel()<br> \
self.model.setFilter(QtCore.QDir.AllDirs|QtCore.QDir.NoDotAndDotDot|QtCore.QDir.NoSymLinks)<br> \
path=os.path.expanduser("~")<br> \
self.model.setRootPath(path)<br> \
self.ui.columnView.setModel(self.model)<br> <br> \
self.ui.columnView.setRootIndex(self.model.index(path))<br> <br> \
self.show()<br> <br>class Ui_Dialog(object):<br> def setupUi(self, \
Dialog):<br> Dialog.setObjectName(_fromUtf8("Dialog"))<br> \
Dialog.resize(596, 389)<br> self.verticalLayout = \
QtGui.QVBoxLayout(Dialog)<br> \
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))<br> \
self.columnView = QtGui.QColumnView(Dialog)<br> \
self.columnView.setObjectName(_fromUtf8("columnView"))<br> \
self.verticalLayout.addWidget(self.columnView)<br> self.horizontalLayout = \
QtGui.QHBoxLayout()<br> \
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))<br> \
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, \
QtGui.QSizePolicy.Minimum)<br> \
self.horizontalLayout.addItem(spacerItem)<br> self.closePushButton = \
QtGui.QPushButton(Dialog)<br> \
self.closePushButton.setObjectName(_fromUtf8("closePushButton"))<br> \
self.horizontalLayout.addWidget(self.closePushButton)<br> \
self.verticalLayout.addLayout(self.horizontalLayout)<br> \
self.retranslateUi(Dialog)<br> \
QtCore.QMetaObject.connectSlotsByName(Dialog)<br> def retranslateUi(self, \
Dialog):<br> Dialog.setWindowTitle(_translate("Dialog", \
"Dialog", None))<br> \
self.closePushButton.setText(_translate("Dialog", "Close", \
None))<br><br>if __name__ == "__main__":<br> import sys<br> app = \
QtGui.QApplication(sys.argv)<br> view = columnView()<br> \
sys.exit(app.exec_())</blockquote><div><br></div></div><div>Any help is appreciated. \
</div></div>
[Attachment #6 (text/plain)]
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic