728x90
반응형
PySide6의 포커스 정책 (FocusPolicy) :
PySide6에서 QWidget 클래스의 setFocusPolicy() 메서드는 위젯이 키보드 포커스를 어떻게 받을지 결정함
Method Signature :
# QWidget 클래스의 메서드
QWidget.setFocusPolicy(policy: Qt.FocusPolicy)
- 여기서 policy는 다음에 설명된 Qt.FocusPolicy 열거형(Enum Type) 값 중 하나임.
포커스 정책 종류 :
Qt.NoFocus: 키보드 포커스를 받지 않음Qt.TabFocus: 탭 키로만 포커스 받음Qt.ClickFocus: 마우스 클릭으로만 포커스 받음Qt.StrongFocus: 탭 키와 마우스 클릭으로 포커스 받음Qt.WheelFocus: 탭 키, 마우스 클릭, 마우스 휠로 포커스 받음
Example :
아래 예제는 서로 다른 포커스 정책을 가진 여러 Widget을 보여줌.
import sys
from PySide6.QtWidgets import (QApplication, QMainWindow, QVBoxLayout,
QWidget, QTextEdit, QLabel)
from PySide6.QtCore import Qt
class FocusPolicyDemo(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PySide6 포커스 정책 데모")
self.setGeometry(100, 100, 500, 600)
# 중앙 위젯 설정
central_widget = QWidget()
self.setCentralWidget(central_widget)
# 레이아웃 생성
layout = QVBoxLayout(central_widget)
# NoFocus 위젯
layout.addWidget(QLabel("Qt.NoFocus - 키보드 포커스를 받지 않음:"))
no_focus = QTextEdit("이 텍스트 편집기는 포커스를 받지 않습니다. 클릭해도 수정할 수 없습니다.")
no_focus.setFocusPolicy(Qt.NoFocus)
layout.addWidget(no_focus)
# TabFocus 위젯
layout.addWidget(QLabel("Qt.TabFocus - 탭 키로만 포커스 받음:"))
tab_focus = QTextEdit("이 텍스트 편집기는 탭 키로만 포커스를 받습니다. 클릭해도 포커스가 오지 않습니다.")
tab_focus.setFocusPolicy(Qt.TabFocus)
layout.addWidget(tab_focus)
# ClickFocus 위젯
layout.addWidget(QLabel("Qt.ClickFocus - 마우스 클릭으로만 포커스 받음:"))
click_focus = QTextEdit("이 텍스트 편집기는 클릭으로만 포커스를 받습니다. 탭 키로는 이동할 수 없습니다.")
click_focus.setFocusPolicy(Qt.ClickFocus)
layout.addWidget(click_focus)
# StrongFocus 위젯
layout.addWidget(QLabel("Qt.StrongFocus - 탭 키와 마우스 클릭으로 포커스 받음:"))
strong_focus = QTextEdit("이 텍스트 편집기는 탭 키와 클릭 모두로 포커스를 받습니다.")
strong_focus.setFocusPolicy(Qt.StrongFocus)
layout.addWidget(strong_focus)
# WheelFocus 위젯
layout.addWidget(QLabel("Qt.WheelFocus - 탭 키, 마우스 클릭, 마우스 휠로 포커스 받음:"))
wheel_focus = QTextEdit("이 텍스트 편집기는 탭 키, 클릭, 휠 모두로 포커스를 받습니다.")
wheel_focus.setFocusPolicy(Qt.WheelFocus)
layout.addWidget(wheel_focus)
# 초기 포커스 설정
strong_focus.setFocus()
def keyPressEvent(self, event):
# ESC 키를 누르면 애플리케이션 종료
if event.key() == Qt.Key_Escape:
self.close()
else:
super().keyPressEvent(event)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = FocusPolicyDemo()
window.show()
sys.exit(app.exec())
사용 시나리오 :
Qt.NoFocus:QLabel,QFrame,QGroupBox,QProgressBar등 키보드 입력이 필요 없는 표시 전용 위젯Qt.TabFocus:QLineEdit,QSpinBox,QDateEdit등 탭 키로 순서대로 접근해야 하는 폼 필드Qt.ClickFocus:QToolButton,QMenu등 클릭으로만 활성화되는 특수 컨트롤Qt.StrongFocus:QPushButton,QCheckBox,QRadioButton,QComboBox등 일반적인 입력 위젯 (가장 일반적인 설정)Qt.WheelFocus:QListView,QTreeView,QTableView,QScrollArea등 휠 이벤트가 중요한 위젯
참고사항 :
QWidget.setFocus()메서드는 위젯에 즉시 포커스를 부여:QWidget.setFocus()- 현재 포커스 정책을 확인하려면
QWidget.focusPolicy()메서드를 사용:Qt.FocusPolicy객체를 반환.
728x90
'Python > PySide PyQt' 카테고리의 다른 글
| [PySide] CustomModel 구현을 통한 Model-View 이해 - 작성중 (2) | 2025.06.03 |
|---|---|
| [PySide6] QTreeView 와 QStandardItemModel, QStandardItem (1) | 2025.06.02 |
| [PySide6] Installing PySide6 (and Designer) on Windows (with Conda) (0) | 2025.02.11 |
| [PySide] Ex: Img Viewer. QListWidget and Matplotlib (0) | 2024.06.04 |
| [PySide] Ex: Matplotlib 에서 상호작용 기능 구현 (0) | 2024.05.19 |