Метка Qt Style QRadioButton?

Есть ли способ стилизовать метки QRadioButton? в частности, я хочу переместить метку наверх, отсюда:

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

к этому:

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

Последнее было сделано в tkinter.


person Laif    schedule 21.11.2019    source источник


Ответы (1)


вы можете добиться этого, используя QVBoxLayout и QLabel в QHBoxLayout.

from PyQt5.QtWidgets import (
    QLabel, QRadioButton, QVBoxLayout, QHBoxLayout,
    QApplication, QWidget
)
import sys

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.layout = QHBoxLayout()
        self.setLayout(self.layout)

        self.vlayout1 = QVBoxLayout()
        self.label1 = QLabel("HW")
        self.radiobutton1 = QRadioButton()
        self.radiobutton1.setChecked(True)
        self.radiobutton1.toggled.connect(self.onClicked)
        self.vlayout1.addWidget(self.label1)
        self.vlayout1.addWidget(self.radiobutton1)
        self.layout.addLayout(self.vlayout1)

        self.vlayout2 = QVBoxLayout()
        self.label2 = QLabel("SW")
        self.radiobutton2 = QRadioButton()
        self.radiobutton2.toggled.connect(self.onClicked)
        self.vlayout2.addWidget(self.label2)
        self.vlayout2.addWidget(self.radiobutton2)
        self.layout.addLayout(self.vlayout2)

    def onClicked(self):
        radioButton = self.sender()
        if radioButton.isChecked():
            print("Radio button clicked")


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

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

person Eliakin Costa    schedule 21.11.2019
comment
Простите меня за придирчивость, но я изначально не пошел с этим, потому что, несмотря на то, что к переключателям не прикреплена метка, вы можете видеть, что они все еще выделяют поле для этого, в результате чего все смещено от центра. Полное изменение положения этого поля может исправить это, но также может исправить исправление стиля, чтобы устранить его. IIRC отрицательное правое поле не сработало для этого. - person Laif; 21.11.2019
comment
Все в порядке, @Laif. Я бы рассмотрел возможность использования addStretch и/или addSpacerItem. - person Eliakin Costa; 21.11.2019
comment
Как это поможет? - person Laif; 21.11.2019
comment
@Laif Использование addStretch подтолкнет переключатель к метке. Чтобы центрировать виджеты, выполните layout.addWidget(widget, 0, Qt.AlignHCenter). Зазор между меткой и кнопкой можно отрегулировать с помощью layout.setSpacing(num). - person ekhumoro; 21.11.2019
comment
Я говорю о пространстве справа справа от фактической кнопки. Это приводит к тому, что индикатор выступает из левой части этикетки. Расстояние между этикеткой и индикатором нормальное. - person Laif; 21.11.2019
comment
@Laif Дайте кнопке фиксированную ширину, чтобы она не расширялась по горизонтали: button.setFixedWidth(button.sizeHint().height()). - person ekhumoro; 21.11.2019
comment
@ekhumoro Это вызывает странные проблемы с отсечением, а также делает контейнер очень широким. - person Laif; 22.11.2019
comment
@Laif У меня отлично работает. Когда я вношу предлагаемые изменения в пример кода, показанный выше, он выглядит точно так же, как второе изображение, показанное в вашем вопросе. - person ekhumoro; 22.11.2019
comment
Спасибо за дополнительную информацию, @ekhumoro. :) - person Eliakin Costa; 22.11.2019