PyQt PySide Менять фокус стрелками, а не tab'ом. Смена стиля при смене фокуса
Вопрос 1: Есть 3 простых виджета. Каждый из них при попадании в фокус должен получать стиль. Такое не работает:
if self.btn.hasFocus():
self.setStyleSheet(st)
Можно сделать по отдельному классу для каждого виджета и там прописать
def focusInEvent(self, e):
self.setStyleSheet(st)
def focusOutEvent(self, e):
self.setStyleSheet(" ")
Работает, но не подходит.
Вопрос 2.
Как переопределить поведение стрелок влево-вправо и ходить между виджетами стрелками, а не tab\tab+shift
.
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
import sys
st = "border: 3px solid; border-color:red;"
class InFocus(QWidget):
def __init__(self, parent=None):
super(InFocus, self).__init__(parent)
hbox = QHBoxLayout()
self.btn = QPushButton()
self.le = QLineEdit()
self.sb = QSpinBox()
hbox.addWidget(self.btn)
hbox.addWidget(self.le)
hbox.addWidget(self.sb)
self.setLayout(hbox)
def keyPressEvent(self, keyEvent):
super().keyPressEvent(keyEvent)
key = keyEvent.key()
if key == Qt.Key_Right:
pass # tab
elif key == Qt.Key_Left:
pass # tab+shift
if __name__ == "__main__":
app = QApplication(sys.argv)
w = InFocus()
w.resize(300, 100)
w.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: Garp
→ Ссылка
Нашёл ответ на первый вопрос
st = """QPushButton{ background-color: cyan; }
QPushButton:focus{background-color:
cyan;border: 2px solid; border-color:brown;}"""
self.btn.setStyleSheet(st)
И так для каждого виджета.