QTableWidgetItem, Text um 90 Grad drehen (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 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
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

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_()
OS: LMDE5 *** Homepage *** Github Seite
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

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_())
OS: LMDE5 *** Homepage *** Github Seite
Martin1986
User
Beiträge: 11
Registriert: Freitag 4. September 2020, 10:13

Super, vielen Dank Axel-WAK.
Klappt perfekt.
Antworten