Seite 1 von 1

QFontComboBox Styling

Verfasst: Mittwoch 23. November 2022, 19:07
von Fire Spike
Hallo Leute

Ich habe mich jetzt für PySide6 entschieden.
@__deets__, du hast gesiegt 😉

Ich möchte die Hintergrundfarbe usw. für QFontComboBox mit einem Stylesheet anpassen.
Für die normale ComboBox habe ich schon ein Sheet, leider schaffe ich es nicht, dieses für QFontComboBox anzupassen. Es wird einfach ignoriert.
Was ich für die ComboBox habe:

Code: Alles auswählen

QAbstractItemView {
     border-bottom-right-radius: 3px;
     border-bottom-left-radius: 3px;
     border: 1px solid gainsboro;
     box-shadow: transparent;
     padding: 4px 4px 4px 4px;

Code: Alles auswählen

QComboBox {
    border: 1px solid gainsboro;
    border-radius: 3px;
    selection-color: black;
    selection-background-color: rgb(250, 250, 250);
}
Durch googeln habe ich leider keine Lösung gefunden.
Kann mir jemand helfen?

Danke im Voraus

Re: QFontComboBox Styling

Verfasst: Freitag 25. November 2022, 09:27
von Fire Spike
Ich habe folgendes gefunden: https://forum.qt.io/topic/102259/chang ... combobox/7
Kann ich das, was die mit C++ gemacht haben auch in Python umsetzen?

Re: QFontComboBox Styling

Verfasst: Freitag 25. November 2022, 09:41
von __deets__
Sollte gehen, ja.

Re: QFontComboBox Styling

Verfasst: Freitag 25. November 2022, 16:58
von Fire Spike
Sieht jemand von euch eine bessere einfachere Option?
Ich möchte das nur ungern umschreiben, da ich nur sehr wenig Ahnung von C++ habe.

Re: QFontComboBox Styling

Verfasst: Freitag 25. November 2022, 17:38
von __deets__
Sieht nicht so aus, sonst hätte das Stylesheet denke ich funktioniert.

Re: QFontComboBox Styling

Verfasst: Dienstag 29. November 2022, 12:00
von Axel-WAK
Ersetze im Stylesheet QComboBox durch QFontComboBox.

Re: QFontComboBox Styling

Verfasst: Dienstag 29. November 2022, 14:57
von __deets__
@Axel-WAK: der Link, den der TE gepostet hat, sagt klar, dass das nicht ging in der Vergangenheit. Hast du das probiert, oder nur vermutet?

Re: QFontComboBox Styling

Verfasst: Dienstag 29. November 2022, 17:31
von Axel-WAK
Eine Vermutung hätte ich sicher nicht gepostet. Ich habe es schon öfter verwendet.

Gerade noch mal getestet. In der Mitte ist die QFontComboBox

Code: Alles auswählen

QFontComboBox, QComboBox
{
background: #9141ac;
font-size: 8pt;
}
Bild

Re: QFontComboBox Styling

Verfasst: Dienstag 29. November 2022, 18:09
von __deets__
Sehr schön!

Re: QFontComboBox Styling

Verfasst: Dienstag 29. November 2022, 18:27
von Fire Spike
Kannst du damit auch die border-color und background-color von den aktiven items ändern?

Re: QFontComboBox Styling

Verfasst: Dienstag 29. November 2022, 20:13
von Axel-WAK
Das geht wohl nicht, aber man könnte ja für Fonts auch eine normale QComboBox nehmen.

Bild

Beispiel:

Code: Alles auswählen

from PySide6.QtWidgets import (QTextEdit, QComboBox, QMainWindow, QToolBar, 
                        QApplication)
from PySide6.QtGui import Qt, QFontDatabase, QIcon,QTextCharFormat, QTextCursor
import sys

class myEditor(QMainWindow):
    def __init__(self, parent = None):
        super(myEditor, self).__init__(parent)
        self.editor = QTextEdit() 
        self.setCentralWidget(self.editor)
        self.setStyleSheet(myStyleSheet(self))
        self.createToolbar()

    def createToolbar(self):        
        ### Font Toolbar
        self.font_tb = QToolBar(self)
        self.font_tb.setAllowedAreas(Qt.TopToolBarArea | Qt.BottomToolBarArea)
        self.font_tb.setWindowTitle("Font Toolbar")
        
        self.comboFont = QComboBox(self.font_tb)
        self.font_tb.addSeparator()
        self.font_tb.addWidget(self.comboFont)
        self.comboFont.setEditable(True)


        self.comboSize = QComboBox(self.font_tb)
        self.font_tb.addSeparator()
        self.comboSize.setObjectName("comboSize")
        self.font_tb.addWidget(self.comboSize)
        self.comboSize.setEditable(True)

        fontFamilies = QFontDatabase.families()
        for family in fontFamilies:
            self.comboFont.addItem(family)
        fontStyles = QFontDatabase.styles(family)
        for style in fontStyles:
            smoothSizes = QFontDatabase.smoothSizes(family, style)
            for points in smoothSizes:
                self.comboSize.addItem(str(points))
        self.comboSize.currentTextChanged.connect(self.textSize)
        self.comboSize.setCurrentIndex(4)
        
  
        self.addToolBar(self.font_tb)
        index = self.comboFont.findText("Ubuntu")
        self.comboFont.currentTextChanged.connect(self.textFamily)
        self.comboFont.setCurrentIndex(index)
        
        self.editor.setText("Das ist ein Text")

    def textFamily(self):
        family = self.comboFont.currentText()
        fmt = QTextCharFormat()
        fmt.setFont(family)
        self.mergeFormatOnWordOrSelection(fmt)

    def textSize(self, pointSize):
        pointSize = int(self.comboSize.currentText())
        if pointSize > 0:
            fmt = QTextCharFormat()
            fmt.setFontPointSize(pointSize)
            self.mergeFormatOnWordOrSelection(fmt)
            
    def mergeFormatOnWordOrSelection(self, format):
        cursor = self.editor.textCursor()
        if not cursor.hasSelection():
            cursor.select(QTextCursor.WordUnderCursor)

        cursor.mergeCharFormat(format)
        self.editor.mergeCurrentCharFormat(format)

  
def myStyleSheet(self):
    return """
    QComboBox
    {
    background: lightgreen;
    font-size: 10pt;
    }
    QComboBox QListView:item {
    background: lightblue;
}
    QComboBox QListView:item:hover {
    background: yellow;
    color: #222;
    border: 2px solid red;
}
    """       

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = myEditor()
    win.setWindowIcon(QIcon.fromTheme("accessories-text-editor"))
    win.setWindowTitle("RichTextEdit")
    win.setMinimumSize(640,250)
    win.show()
    app.exec()

Re: QFontComboBox Styling

Verfasst: Dienstag 29. November 2022, 21:14
von Fire Spike
Vielen Dank

Werde ich mir noch anschauen.