Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions src/superqt/switch/_toggle_switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,23 @@ def drawGroove(
is_checked = option.state & QtW.QStyle.StateFlag.State_On
is_enabled = option.state & QtW.QStyle.StateFlag.State_Enabled
# draw the groove
on_color = option.on_color
off_color = option.off_color
if is_enabled:
painter.setBrush(option.on_color if is_checked else option.off_color)
painter.setBrush(on_color if is_checked else off_color)
painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True)
painter.setOpacity(0.8)
else:
painter.setBrush(option.off_color)
if is_checked:
ratio = 0.32
mixed_color = QtGui.QColor(
int(on_color.red() * ratio + off_color.red() * (1 - ratio)),
int(on_color.green() * ratio + off_color.green() * (1 - ratio)),
int(on_color.blue() * ratio + off_color.blue() * (1 - ratio)),
)
painter.setBrush(mixed_color)
else:
painter.setBrush(off_color)
painter.setOpacity(0.6)

half_height = option.switch_height / 2
Expand Down
28 changes: 28 additions & 0 deletions tests/test_toggle_switch.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,26 @@
from unittest.mock import Mock

import pytest
from qtpy.QtCore import Qt
from qtpy.QtWidgets import QApplication, QCheckBox, QVBoxLayout, QWidget

from superqt import QToggleSwitch


def test_construction(qtbot):
wdg = QToggleSwitch("test")
qtbot.addWidget(wdg)
assert wdg.text() == "test"

parent = QWidget()
qtbot.addWidget(parent)
wdg = QToggleSwitch(parent)
assert wdg.parent() is parent

with pytest.raises(TypeError):
QToggleSwitch(parent, "test")


def test_on_and_off(qtbot):
wdg = QToggleSwitch()
qtbot.addWidget(wdg)
Expand All @@ -30,6 +45,19 @@ def test_on_and_off(qtbot):
QApplication.processEvents()


def test_disabled(qtbot):
wdg = QToggleSwitch()
qtbot.addWidget(wdg)
wdg.setDisabled(True)
assert not wdg.isEnabled()
initial_state = wdg.isChecked()
qtbot.mouseClick(wdg, Qt.MouseButton.LeftButton)
assert wdg.isChecked() == initial_state # state should not change
wdg.setChecked(not initial_state)
qtbot.mouseClick(wdg, Qt.MouseButton.LeftButton)
assert wdg.isChecked() == (not initial_state) # state should not change


def test_get_set(qtbot):
wdg = QToggleSwitch()
qtbot.addWidget(wdg)
Expand Down
Loading