Как сделать свой переключатель PyQt5?

Вопрос прост. Я хочу сделать кнопку-переключатель, которая еще в разные стороны ездит, когда на нее тыкаешь.

Я поискал по интернету, нашел одну статью вчера. Но успешно потерял ее и лишился единственного найденного примера) Я знаю, что нужно каким-то образом перерисовать QAbstractButton или QPushButton, но каким конкретно образом - не знаю.

Собственно, я бы обнял того человека, который дал бы минимальный пример, чтобы понять, как вообще перерисовываются виджеты. А также объяснить, как менять положение этой кнопки на фоне (ну когда на нее тыкаешь, там ее часть вправо-влево ездит).

Что-то типа этого:Этого


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

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

Самое простое решение - использовать таблицу стилей с QCheckBox. Просто отредактируйте таблицу стилей для флажка.

Другое решение можно увидеть здесь Toggle switch на PyQt5

import sys
from PyQt5 import QtWidgets


app = QtWidgets.QApplication(sys.argv)

switch = QtWidgets.QCheckBox()
switch.setStyleSheet('''
    QCheckBox::indicator:unchecked {
        image: url(switch_off.png);
    }
    QCheckBox::indicator:checked {
        image: url(switch_on.png);
    }
''')

switch.show()
sys.exit(app.exec_())

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

switch_off.png

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

switch_on.png

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

→ Ссылка