[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&#39;ve created a columnview with checkboxes. However whenever I \
check or uncheck an item, next column is loaded automatically. I don&#39;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&#39;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(&quot;~&quot;)<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(&quot;Dialog&quot;))<br>       \
Dialog.resize(596, 389)<br>            self.verticalLayout = \
QtGui.QVBoxLayout(Dialog)<br>            \
self.verticalLayout.setObjectName(_fromUtf8(&quot;verticalLayout&quot;))<br>          \
self.columnView = QtGui.QColumnView(Dialog)<br>            \
self.columnView.setObjectName(_fromUtf8(&quot;columnView&quot;))<br>            \
self.verticalLayout.addWidget(self.columnView)<br>            self.horizontalLayout = \
QtGui.QHBoxLayout()<br>            \
self.horizontalLayout.setObjectName(_fromUtf8(&quot;horizontalLayout&quot;))<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(&quot;closePushButton&quot;))<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(&quot;Dialog&quot;, \
&quot;Dialog&quot;, None))<br>            \
self.closePushButton.setText(_translate(&quot;Dialog&quot;, &quot;Close&quot;, \
None))<br><br>if __name__ == &quot;__main__&quot;:<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