Ваше решение отлично. Вы не нуждаетесь в трех ветвях, потому что str.upper()
вернет str, если верхняя часть не применима.
С помощью выражений генератора это можно сократить до:
>>> name = 'Mr.Ed'
>>> ''.join(c.lower() if c.isupper() else c.upper() for c in name)
'mR.eD'
Метод «setStyleSheet» УСТАНАВЛИВАЕТ таблицу стилей, а не добавляет новую, поэтому вы продолжаете переопределять уже установленную.
Чтобы указать несколько стилей, попробуйте следующее:
snapshotToolButton.setStyleSheet("#SnapShotButton {border: none;} #SnapShotButton:hover { background-color: pink; }")