Как удалить кружок из 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_())



