Seite 1 von 1

QTableWidgetItem, Text um 90 Grad drehen (PyQt5)

Verfasst: Montag 23. Januar 2023, 21:05
von Martin1986
Hallo liebe Forenmitglieder,
ich möchte den Text vom QTableWidgetItem im QTableWidget um 90 Grad drehen.
Mit setSpan() verbinde ich einige Zellen. Danach möchte ich den Text des Items der verbundenen Zellen um 90 Grad drehen.
Ich habe ein Minimalbeispiel, zum besseren Verständinis, mit angehängt .
Leider habe ich zu diesem Thema nicht viel gefunden, ich hoffe ihr könnt mir helfen!

Die Variable "vertikal" im Codebeispiel beschreibt das QTableWidgetItem, dessen Text ich 90Grad drehen möchte!

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import *


class Test(QWidget):
    def __init__(self):
        super().__init__()
        self.left = 0
        self.top = 0
        self.width = 400
        self.height = 300
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)

        self.show()


    def createTable(self):
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(2)

        self.tableWidget.setItem(0, 1, QTableWidgetItem("Test1"))
        self.tableWidget.setItem(1, 1, QTableWidgetItem("Test2"))
        self.tableWidget.setItem(2, 1, QTableWidgetItem("Test3"))
        self.tableWidget.setItem(3, 1, QTableWidgetItem("Test4"))

        self.tableWidget.setSpan(0, 0, 4, 1)
        vertikal = QTableWidgetItem("Vertikal (90Grad gedreht!)")  # Text um 90 Grad drehen!
        self.tableWidget.setItem(0,0, vertikal)

        self.tableWidget.horizontalHeader().setStretchLastSection(True)
        self.tableWidget.horizontalHeader().setSectionResizeMode(
            QHeaderView.Stretch)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Test()
    sys.exit(app.exec_())
Vielen Dank schon im Voraus
Martin

Re: QTableWidgetItem, Text um 90 Grad drehen (PyQt5)

Verfasst: Montag 23. Januar 2023, 21:23
von Axel-WAK
Eine Zelle drehen? Du könntest vielleicht ein Widget in die Zelle einbauen und den Text im paintEvent drehen.

Code: Alles auswählen

import sys
from PyQt5.QtGui import QPainter, QFont
from PyQt5.QtWidgets import QWidget, QApplication

class Win(QWidget):

    def paintEvent(self, event):

        font = QFont("Ubuntu", 50)

        painter = QPainter(self)
        painter.setFont(font)

        painter.save()
        painter.translate(400, 100)
        painter.rotate(180)
        painter.drawText(0, 0, "Rotated")
        painter.restore()

app = QApplication(sys.argv)
win = Win()
win.show()

app.exec_()

Re: QTableWidgetItem, Text um 90 Grad drehen (PyQt5)

Verfasst: Montag 23. Januar 2023, 22:03
von Axel-WAK
Sternchenimporte sind böse.

Ein kleiner Test

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import (QTableWidget, QApplication, QWidget, 
                             QTableWidgetItem, QHeaderView, QVBoxLayout)
from PyQt5.QtGui import QFont, QPainter

class CellRotated(QWidget):

    def paintEvent(self, event):

        font = QFont("Ubuntu", 10)

        painter = QPainter(self)
        painter.setFont(font)

        painter.save()
        painter.translate(170, 20)
        painter.rotate(180)
        painter.drawText(0, 0, "Vertikal (90Grad gedreht!)")
        painter.restore()
        
class Test(QWidget):
    def __init__(self):
        super().__init__()
        self.left = 0
        self.top = 0
        self.width = 400
        self.height = 300
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)

        self.show()


    def createTable(self):
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(2)

        self.tableWidget.setItem(0, 1, QTableWidgetItem("Test1"))
        self.tableWidget.setItem(1, 1, QTableWidgetItem("Test2"))
        self.tableWidget.setItem(2, 1, QTableWidgetItem("Test3"))
        self.tableWidget.setItem(3, 1, QTableWidgetItem("Test4"))
        
        rotated_widget = CellRotated()

        self.tableWidget.setSpan(0, 0, 4, 1)
        #vertikal = QTableWidgetItem("Vertikal (90Grad gedreht!)")  # Text um 90 Grad drehen!
        self.tableWidget.setCellWidget(0,0, rotated_widget)

        self.tableWidget.horizontalHeader().setStretchLastSection(True)
        self.tableWidget.horizontalHeader().setSectionResizeMode(
            QHeaderView.Stretch)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Test()
    sys.exit(app.exec_())

Re: QTableWidgetItem, Text um 90 Grad drehen (PyQt5)

Verfasst: Dienstag 24. Januar 2023, 11:45
von Martin1986
Super, vielen Dank Axel-WAK.
Klappt perfekt.