(Un)ChechkingAll from Tree View
-
- If put print (QStandardItemModel()) I gain: <PyQt5.QtGui.QStandardItemModel object at 0x00000229EA8F7160>
all data in Tree View come from parsed xml (to variable tree) file (I can't publish them), by
root = tree.getroot()
and later
for grupaKontroli in root: parent = QStandardItem(grupaKontroli.get('name')) QStandardItemModel.appendRow(parent) parent.setCheckable(True) setCheckState(Qt.Checked)
- Answer for that is in function above
This function in the end of main post
@Karoluss96
No. I'm afraid you do not seem to have a grasp of models/what is going on. You might benefit from reading up on this in the documentation.The answer to, for example, how do I set every checkbox in my model would be:
for i in range(model.rowCount()): model.item(i).setCheckState(Qt.Checked)
If you want to only check items in and below some one particular node you would need to recurse down its descendants. But you asked for check every item.
- If put print (QStandardItemModel()) I gain: <PyQt5.QtGui.QStandardItemModel object at 0x00000229EA8F7160>
-
Looks useful, pretty and short, but I still didn't see its results- It need to take data from treeView!
-
Looks useful, pretty and short, but I still didn't see its results- It need to take data from treeView!
@Karoluss96 said in (Un)ChechkingAll from Tree View:
It need to take data from treeView!
A
QTreeView
does not store any data. It's a view onto a model. The model is where you store the data. @SGaist has said this, I have said this. I suggested you might like to read up on Qt model/view architecture. -
Please provide a minimal script a minimal script that creates your tree view and its content. We will then be able to reason on it properly to help you achieve your goal.
-
@SGaist said in (Un)ChechkingAll from Tree View:
Please provide a minimal script a minimal script that creates your tree view and its content. We will then be able to reason on it properly to help you achieve your goal.
OK, so I attached it;
def kontrolBDOTread(self): #BDOT is a name of database path = str(self.controlPath).replace('\\','/') + '/' + self.dlg.comboBox_4.currentText() tree = et.parse(path)#parsing XML root = tree.getroot() wersjaSzablonuKontroli = root.get('version') self.dlg.label_8.setText('Wersja szablonu: '+str(wersjaSzablonuKontroli) model = QStandardItemModel() model.setHorizontalHeaderLabels(['Lista kontroli'])#Nagłówek self.dlg.treeView.setModel(model) self.dlg.treeView.setUniformRowHeights(True) i = 0 for grupaKontroli in root: parent = QStandardItem(grupaKontroli.get('name')) model.appendRow(parent) parent.setCheckable(True) parent.setCheckState(Qt.Checked) parent.setUserTristate(True) for kontrola in grupaKontroli: child = QStandardItem(kontrola.get('name')) child.setCheckable(True) child.setCheckState(Qt.Checked) parent.appendRow([child]) self.dlg.treeView.setFirstColumnSpanned(i, self.dlg.treeView.rootIndex(), True) i = i + 1 self.dlg.treeView.show()
-
And how its looks like
-
By minimal script, I meant a script that we can run ourselves on our machines which is not possible with what you posted.
-
Well, it's a UI plugin. It need to be a part of QGIS program (it's free on download by: https://qgis.org/pl/site/forusers/download.html)
-
The fact that you need to write a plugin for QGIS is currently unrelated to your issue hence why I am requesting a minimal script that creates a QTreeView with the model and the buttons you want. With that we can fix the current issue you have and you can then update your plugin code with that.
-
aaaa Ok,
The whole code is too long, as this tab is one of 5 which make this plugin, so I put only that what is here important:def __init__(self, iface): """Constructor. :param iface: An interface instance that will be passed to this class which provides the hook by which you can manipulate the QGIS application at run time. :type iface: QgsInterface """ # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname(__file__) # initialize locale locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join( self.plugin_dir, 'i18n', 'SystemBDOT10k{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) QCoreApplication.installTranslator(self.translator) # Declare instance attributes self.actions = [] self.menu = self.tr(u'&SystemBDOT10k') # Check if plugin was started the first time in current QGIS session # Must be set in initGui() to survive plugin reloads self.first_start = None # noinspection PyMethodMayBeStatic def tr(self, message): # noinspection PyTypeChecker,PyArgumentList,PyCallByClass return QCoreApplication.translate('SystemBDOT10k', message) def add_action( self, icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None): icon = QIcon(icon_path) action = QAction(icon, text, parent) action.triggered.connect(callback) action.setEnabled(enabled_flag) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar: # Adds plugin icon to Plugins toolbar self.iface.addToolBarIcon(action) if add_to_menu: self.iface.addPluginToMenu( self.menu, action) self.actions.append(action) return action def initGui(self): """Create the menu entries and toolbar icons inside the QGIS GUI.""" icon_path = ':/plugins/SystemBDOT10k/icon.png' self.add_action( icon_path, text=self.tr(u'SystemBDOT10k'), callback=self.run, parent=self.iface.mainWindow()) # will be set False in run() self.first_start = True def unload(self): """Removes the plugin menu item and icon from QGIS GUI.""" for action in self.actions: self.iface.removePluginMenu( self.tr(u'&SystemBDOT10k'), action) self.iface.removeToolBarIcon(action) def run(self): #sources paths self.qmlPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/BDOT10k_QML/") self.mainPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/") self.controlPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/Kontrole/") self.dlg = SystemBDOT10k_dialog() self.dlg.rejected.connect(self.close) self.dlg.pushButton_3.clicked.connect(self.CheckAll) self.dlg.pushButton_4.clicked.connect(self.UncheckAll) #download the names of template of controls filenames = next(walk(self.controlPath), (None, None, []))[2] for filename in filenames: self.dlg.comboBox_4.addItem(filename) self.dlg.comboBox_4.currentTextChanged.connect(self.kontrolBDOTread) self.kontrolBDOTread()
The function kontrolBDOTread attached above my print screen.
-
Please, a minimal script
import sys from QtXxx.QtWidgets import QTableView # additional imports app = QApplication(sys.argv) model = QStandardItemModel() # populate your model table_view = QTableView() table_view.setModel(model) # finish the ui sys.exit(app.exec())