Seite 1 von 1

CheckBox in Zelle von QTableWidget zentrieren (PYQT5)

Verfasst: Dienstag 5. März 2024, 12:04
von Martin1986
Hallo zusammen,
ich habe eine Frage bzgl. des Ausrichtens einer QCheckBox in einem QTableWidget.
Wie zentriere ich eine QCheckBox horizontal in der ersten Spalte vom TableWidget!
Vielen Dank für eure Hilfe!
Martin

Ich habe ein Minimalbeispiel mit angehängt:

Code: Alles auswählen

import sys
from PyQt5 import QtWidgets, QtCore


class Hauptfenster(QtWidgets.QMainWindow):
    """
    Hauptfenster
    """
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setObjectName("Hauptfenster")
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setRowCount(1)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setObjectName("tableWidget")
        self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
        self.setCentralWidget(self.centralwidget)

    def fuelletablewidget(self) -> None:
        """
        Fuelle Tablewidget
        """
        # CheckBox in Zeile 0 und Spalte 0
        checkbox = QtWidgets.QCheckBox(self)
        self.tableWidget.setCellWidget(0, 0, checkbox)

        # Beispieltext in Zeile 0 und Spalte 1
        item = QtWidgets.QTableWidgetItem()
        item.setText("test")
        item.setTextAlignment(QtCore.Qt.AlignCenter)  # Text zentrieren
        self.tableWidget.setItem(0, 1, item)

        # Table an Fenster anpassen
        self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
        self.tableWidget.resizeRowsToContents()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Hauptfenster()
    window.fuelletablewidget()
    window.show()
    sys.exit(app.exec_())

Re: CheckBox in Zelle von QTableWidget zentrieren (PYQT5)

Verfasst: Dienstag 5. März 2024, 17:43
von __deets__
Ich wuerde mal damit spielen, da ein QWidget mit einem Layout zu benutzen, das dann die Zentrierung vornimmt. Allerdings muss man dem dann noch beibiegen, mit dem QTableWidget zu reden. Siehe zB https://stackoverflow.com/questions/103 ... idget-cell

Re: CheckBox in Zelle von QTableWidget zentrieren (PYQT5)

Verfasst: Mittwoch 6. März 2024, 08:52
von Martin1986
Vielen Dank __deets__, hat super geklappt mit dem Hinweis.
Hier der funktionierende Code:

Code: Alles auswählen

import sys
from PyQt5 import QtWidgets, QtCore


class Hauptfenster(QtWidgets.QMainWindow):
    """
    Hauptfenster
    """
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setObjectName("Hauptfenster")
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setRowCount(1)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setObjectName("tableWidget")
        self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
        self.setCentralWidget(self.centralwidget)

    def fuelletablewidget(self) -> None:
        """
        Fuelle Tablewidget
        """
        widgetforcheckbox = QtWidgets.QWidget(self)
        widgetforcheckbox.setObjectName("widgetforcheckbox")

        horizontalLayout = QtWidgets.QHBoxLayout()
        spacerItem = QtWidgets.QSpacerItem(1, 1, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        horizontalLayout.addItem(spacerItem)

        checkbox = QtWidgets.QCheckBox()
        checkbox.setObjectName("checkbox")
        horizontalLayout.addWidget(checkbox)

        spacerItem1 = QtWidgets.QSpacerItem(1, 1, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        horizontalLayout.addItem(spacerItem1)
        widgetforcheckbox.setLayout(horizontalLayout)

        self.tableWidget.setCellWidget(0, 0, widgetforcheckbox)

        # Text in Zeile 0 und Spalte 1
        item = QtWidgets.QTableWidgetItem()
        item.setText("test")
        item.setTextAlignment(QtCore.Qt.AlignCenter)  # Text zentrieren
        self.tableWidget.setItem(0, 1, item)

        # Table an Fenster anpassen
        self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
        self.tableWidget.resizeRowsToContents()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Hauptfenster()
    window.fuelletablewidget()
    window.show()
    sys.exit(app.exec_())