CheckBox in Zelle von QTableWidget zentrieren (PYQT5)

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Martin1986
User
Beiträge: 11
Registriert: Freitag 4. September 2020, 10:13

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_())
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

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
Martin1986
User
Beiträge: 11
Registriert: Freitag 4. September 2020, 10:13

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_())
Antworten