Как удалить кружок из QRadioButton и оставить только букву?

Мой код

import sys
from PyQt5.QtWidgets import (QRadioButton, QHBoxLayout, QButtonGroup, 
    QApplication, QWidget)
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import QSize, Qt
from PyQt5 import QtCore, QtGui, QtWidgets


class RadioButton(QRadioButton): 
    def __init__(self, parent=None):
        super(RadioButton, self).__init__(parent)
        self.toggled.connect(self.change_text)
        self.setObjectName(u"rb0")
        self.setText('W')


    def change_text(self):
        if self.isChecked():                                   
            self.setText('C')
        else:
            self.setText('W')

    def sizeHint(self):
        return QtCore.QSize(30, 30)      


class Window(QWidget):
    def __init__(self):
        super().__init__()

        self._dictRB = {                                            
            'rb0': False,
            'rb1': False,
            'rb2': False,
            'rb3': False,
        }

        self.main_layout = QWidget(self)
        self.main_layout.setMinimumSize(QSize(300, 300))


        self.buttonGroup = QButtonGroup()
        self.attr_layout = QHBoxLayout(self.main_layout)


        self.rb0 = RadioButton()                             #QRadioButton() # 'rb0'
        self.rb0.setStyleSheet('QRadioButton{background: red} QRadioButton::indicator {width:0 ;height:0;}')
        self.attr_layout.addWidget(self.rb0)
        self.buttonGroup.addButton(self.rb0)

        self.rb1 = QRadioButton('rb1')
        self.rb1.setObjectName(u"rb1")



        self.attr_layout.addWidget(self.rb1)
        self.buttonGroup.addButton(self.rb1)               

        self.rb2 = QRadioButton('rb2')
        self.rb2.setObjectName(u"rb2")
        self.attr_layout.addWidget(self.rb2)
        self.buttonGroup.addButton(self.rb2) 

        self.rb3 = QRadioButton('rb3')
        self.rb3.setObjectName(u"rb3")
        self.buttonGroup.addButton(self.rb3)                         

        self.buttonGroup.buttonClicked.connect(self.check_button)

    def check_button(self, radioButton):
        if self._dictRB[radioButton.objectName()]:
            self._dictRB[radioButton.objectName()] = False
            self._dictRB['rb3'] = True
            self.rb3.setChecked(True)              
        else:
            for b in self._dictRB:
                self._dictRB[b] = False
            self._dictRB[radioButton.objectName()] = True

        print("Нажата кнопка -> `{} - {}`".format(radioButton.objectName(), radioButton.isChecked()))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

Мне нужно удалить кружок и центрировать букву по середине Но проблема в том что я не могу полностью удалить кружок когда я пишу

 QRadioButton::indicator {width:0 ;height:0;}

консоль выдает

QPainter::begin: Paint device returned engine == 0, type: 3

введите сюда описание изображения

И QRadioButton не реагирует на setAlignment и text-align.

Я пробовал использовать QSizePolicy

    sizePolicy0 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    sizePolicy0.setHorizontalStretch(0)
    sizePolicy0.setVerticalStretch(0)
    sizePolicy0.setHeightForWidth(self.rb0.sizePolicy().hasHeightForWidth())
    self.rb0.setSizePolicy(sizePolicy0)

    sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    sizePolicy1.setHorizontalStretch(0)
    sizePolicy1.setVerticalStretch(0)
    sizePolicy1.setHeightForWidth(self.rb1.sizePolicy().hasHeightForWidth())
    self.rb1.setSizePolicy(sizePolicy1)

    sizePolicy2 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    sizePolicy2.setHorizontalStretch(0)
    sizePolicy2.setVerticalStretch(0)
    sizePolicy2.setHeightForWidth(self.rb2.sizePolicy().hasHeightForWidth())
    self.rb2.setSizePolicy(sizePolicy2)

    sizePolicy3 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    sizePolicy3.setHorizontalStretch(0)
    sizePolicy3.setVerticalStretch(0)
    sizePolicy3.setHeightForWidth(self.rb3.sizePolicy().hasHeightForWidth())
    self.rb3.setSizePolicy(sizePolicy3)

Но получилось как то не очень

введите сюда описание изображения

Использовав

  QRadioButton::indicator {background:rgba(255, 255, 255, 0); width:1 ;height:1;}

Я смог полностью скрыть кнопку но одступ остался.

введите сюда описание изображения

И что бы удалить одступ я использовал padding-left:-5; Это не самый лучший способ но другого я не нашел.


Ответы (1 шт):

Автор решения: S. Nick

Я не получаю никаких сообщений на консоль.

Чуть-чуть подправил таблицу стилей.

import sys
from PyQt5.QtWidgets import (QRadioButton, QHBoxLayout, QButtonGroup, 
    QApplication, QWidget)
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import QSize, Qt
from PyQt5 import QtCore, QtGui, QtWidgets


class RadioButton(QRadioButton): 
    def __init__(self, parent=None):
        super(RadioButton, self).__init__(parent)
        self.toggled.connect(self.change_text)
        self.setObjectName(u"rb0")
        self.setText('W')

    def change_text(self):
        if self.isChecked():                                   
            self.setText('C')
        else:
            self.setText('W')

    def sizeHint(self):
        return QtCore.QSize(30, 30)      


class Window(QWidget):
    def __init__(self):
        super().__init__()

        self._dictRB = {                                            
            'rb0': False,
            'rb1': False,
            'rb2': False,
            'rb3': False,
        }

        self.main_layout = QWidget(self)
        self.main_layout.setMinimumSize(QSize(300, 300))

        self.buttonGroup = QButtonGroup()
        self.attr_layout = QHBoxLayout(self.main_layout)

        self.rb0 = RadioButton()                             #QRadioButton() # 'rb0'
        self.attr_layout.addWidget(self.rb0)
        self.buttonGroup.addButton(self.rb0)

        self.rb1 = QRadioButton('rb1')
        self.rb1.setObjectName(u"rb1")

        self.attr_layout.addWidget(self.rb1)
        self.buttonGroup.addButton(self.rb1)               

        self.rb2 = QRadioButton('rb2')
        self.rb2.setObjectName(u"rb2")
        self.attr_layout.addWidget(self.rb2)
        self.buttonGroup.addButton(self.rb2) 

        self.rb3 = QRadioButton('rb3')
        self.rb3.setObjectName(u"rb3")
        self.buttonGroup.addButton(self.rb3)                         
        self.buttonGroup.buttonClicked.connect(self.check_button)

    def check_button(self, radioButton):
        if self._dictRB[radioButton.objectName()]:
            self._dictRB[radioButton.objectName()] = False
            self._dictRB['rb3'] = True
            self.rb3.setChecked(True)              
        else:
            for b in self._dictRB:
                self._dictRB[b] = False
            self._dictRB[radioButton.objectName()] = True

        print("Нажата кнопка -> `{} - {}`".format(radioButton.objectName(), radioButton.isChecked()))
        # print(f"... -> `{self.rb0.width()} - {self.rb0.height()}`")


StyleSheet = '''
QRadioButton#rb0 {
    background: red;
    color: #eff0f1;
    font-weight: bold;
} 
QRadioButton::indicator#rb0 {
    width: 35;                        /* <<<-------< */
    height:0;
}
'''


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(StyleSheet)
    w = Window()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка