Checkbox wird zentriert angezeigt

This commit is contained in:
2025-08-31 17:37:51 +02:00
parent 916c29f235
commit f604a52b82
3 changed files with 81 additions and 20 deletions
+81 -16
View File
@@ -1,4 +1,4 @@
from PySide6.QtWidgets import QDialog, QTreeWidgetItem, QMessageBox from PySide6.QtWidgets import QDialog, QTreeWidgetItem, QCheckBox, QMessageBox, QWidget, QHBoxLayout
from PySide6.QtCore import Qt from PySide6.QtCore import Qt
from pathlib import Path from pathlib import Path
@@ -51,6 +51,74 @@ class XmlToXslAssignDialog(QDialog):
# Header-Eigenschaften # Header-Eigenschaften
self.ui.xslNodesTree.header().setStretchLastSection(False) self.ui.xslNodesTree.header().setStretchLastSection(False)
def _create_centered_checkbox(self):
"""
Erstellt eine zentrierte Checkbox in einem Widget.
Returns:
tuple: (widget, checkbox) - Das Container-Widget und die Checkbox
"""
# Erstelle Container-Widget
widget = QWidget()
# Erstelle horizontales Layout
layout = QHBoxLayout(widget)
layout.setContentsMargins(0, 0, 0, 0)
layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
# Erstelle Checkbox
checkbox = QCheckBox()
checkbox.setChecked(False)
# Füge Checkbox zum Layout hinzu
layout.addWidget(checkbox)
return widget, checkbox
def _add_checkboxes_to_tree(self):
"""
Fügt Checkboxen zu allen XSL-Knoten im Tree hinzu.
Diese Methode wird nach dem Hinzufügen aller Items aufgerufen.
"""
try:
# Durchlaufe alle Items im Tree rekursiv
root = self.ui.xslNodesTree.invisibleRootItem()
self._add_checkboxes_recursive(root)
print(f"Checkboxen zu {len(self.xsl_checkboxes)} XSL-Knoten hinzugefügt")
except Exception as e:
print(f"Fehler beim Hinzufügen der Checkboxen: {e}")
def _add_checkboxes_recursive(self, parent_item):
"""
Fügt rekursiv Checkboxen zu XSL-Knoten hinzu.
Args:
parent_item: Das Eltern-Item
"""
for i in range(parent_item.childCount()):
item = parent_item.child(i)
# Hole das Node-Objekt
node = item.data(0, Qt.ItemDataRole.UserRole)
if isinstance(node, XslFile):
# Erstelle zentrierte Checkbox für XSL-Knoten
checkbox_widget, checkbox = self._create_centered_checkbox()
# Setze das Widget in Spalte 2
self.ui.xslNodesTree.setItemWidget(item, 2, checkbox_widget)
# Speichere Checkbox-Referenz
self.xsl_checkboxes[id(node)] = checkbox
print(f"Checkbox für XSL-Knoten '{node.bez}' hinzugefügt")
# Rekursiv für Kinder
if item.childCount() > 0:
self._add_checkboxes_recursive(item)
def _load_data(self): def _load_data(self):
"""Lädt die Daten in den Dialog.""" """Lädt die Daten in den Dialog."""
# XML-Datei-Label setzen # XML-Datei-Label setzen
@@ -77,6 +145,9 @@ class XmlToXslAssignDialog(QDialog):
# Baum expandieren # Baum expandieren
self.ui.xslNodesTree.expandAll() self.ui.xslNodesTree.expandAll()
# Checkboxen nach dem Hinzufügen der Items erstellen
self._add_checkboxes_to_tree()
def _create_tree_item_from_node(self, node): def _create_tree_item_from_node(self, node):
""" """
@@ -115,16 +186,10 @@ class XmlToXslAssignDialog(QDialog):
item.addChild(child_item) item.addChild(child_item)
elif isinstance(node, XslFile): elif isinstance(node, XslFile):
# XslFile: Zeige XSL-Datei-Pfad und füge Checkbox hinzu # XslFile: Zeige XSL-Datei-Pfad
item.setText(1, str(node.xsl_file)) item.setText(1, str(node.xsl_file))
# Aktiviere Checkbox für dieses Item in Spalte 2 # Checkbox wird später in _add_checkboxes_to_tree() hinzugefügt
item.setFlags(item.flags() | Qt.ItemFlag.ItemIsUserCheckable)
item.setCheckState(2, Qt.CheckState.Unchecked)
# Speichere Item-Referenz für XSL-Knoten
self.xsl_checkboxes[id(node)] = item
# Keine Knoten für XslFile hinzufügen (XML-Dateien werden ausgeschlossen) # Keine Knoten für XslFile hinzufügen (XML-Dateien werden ausgeschlossen)
return item return item
@@ -135,13 +200,13 @@ class XmlToXslAssignDialog(QDialog):
def select_all(self): def select_all(self):
"""Wählt alle XSL-Knoten aus.""" """Wählt alle XSL-Knoten aus."""
for item in self.xsl_checkboxes.values(): for checkbox in self.xsl_checkboxes.values():
item.setCheckState(2, Qt.CheckState.Checked) checkbox.setChecked(True)
def deselect_all(self): def deselect_all(self):
"""Wählt alle XSL-Knoten ab.""" """Wählt alle XSL-Knoten ab."""
for item in self.xsl_checkboxes.values(): for checkbox in self.xsl_checkboxes.values():
item.setCheckState(2, Qt.CheckState.Unchecked) checkbox.setChecked(False)
def get_selected_xsl_nodes(self): def get_selected_xsl_nodes(self):
""" """
@@ -153,9 +218,9 @@ class XmlToXslAssignDialog(QDialog):
selected_nodes = [] selected_nodes = []
try: try:
# Durchlaufe alle XSL-Items # Durchlaufe alle XSL-Checkboxes
for node_id, item in self.xsl_checkboxes.items(): for node_id, checkbox in self.xsl_checkboxes.items():
if item.checkState(2) == Qt.CheckState.Checked: if checkbox.isChecked():
# Finde den entsprechenden XSL-Knoten # Finde den entsprechenden XSL-Knoten
xsl_node = self._find_xsl_node_by_id(node_id) xsl_node = self._find_xsl_node_by_id(node_id)
if xsl_node: if xsl_node:
-3
View File
@@ -48,9 +48,6 @@
<property name="columnCount"> <property name="columnCount">
<number>3</number> <number>3</number>
</property> </property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<attribute name="headerVisible"> <attribute name="headerVisible">
<bool>true</bool> <bool>true</bool>
</attribute> </attribute>
-1
View File
@@ -44,7 +44,6 @@ class Ui_XmlToXslAssignDialog(object):
self.xslNodesTree.setObjectName(u"xslNodesTree") self.xslNodesTree.setObjectName(u"xslNodesTree")
self.xslNodesTree.setHeaderHidden(False) self.xslNodesTree.setHeaderHidden(False)
self.xslNodesTree.setColumnCount(3) self.xslNodesTree.setColumnCount(3)
self.xslNodesTree.setAlternatingRowColors(True)
self.xslNodesTree.header().setVisible(True) self.xslNodesTree.header().setVisible(True)
self.verticalLayout.addWidget(self.xslNodesTree) self.verticalLayout.addWidget(self.xslNodesTree)