버튼 클릭이든, cellchanged 든 위젯을 쓰다보면 이벤트에 반응하는 함수를 구현해서 써야 한다.
버튼이 여러개 인데 거의 동일한 기능을 한다든지 혹은 위젯 배열로 구성했다던지 할 때 각각 signal 함수를 만들면 편리한 점도 있지만, 코드 낭비가 심하다는 기분이 많이 든다.
그래서 찾아보니 sender() 라는 함수가 있어서 동일한 함수를 써도 누가 보내는지 구분할 수 있도록 되어 있다.
이젠 거의 대부분 같은 기능을 하는 중복 함수라면 같이 사용하면 되겠다.
아래 예제 코드의 일부분은 QLineEdit 위젯에 글자를 쓰면 원하는 글자만 받도록 만드는 filter 기능을 넣고 싶을 때 사용한 코드이다.
물론 QLineEdit 가 배열형태로 많이 있는 페이지에서 동일한 필터를 사용하는 경우 사용하는 시나리오에서 참고해 볼 수 있겠다.
# editingFinished signal 에 _filter 함수 등록
self.lineEditList[i].editingFinished.connect( self._filterNumber )
# _filter 함수
def _filterNumber(self):
# 어떤 widget이 보냈는지 알아내서 editWidget 이름으로 사용하면 된다.
editWidget = self.sender()
참고한 페이지는
textChanged() 시그널 이외에 많이 사용되는 시그널로 editingFinished()와 returnPressed()이다. 둘다 리턴/엔터키를 누를 때 발생되며, editionFinished()는 포커를 잃을 때에도 발생된다.
간단한 예시 코드지만, 어딘가 나중에 활용할 때가..
BJ.
ROMAN ODINTSOV 님의 사진, 출처: Pexels
'IT > 파이썬' 카테고리의 다른 글
파이썬 bytearray 배열 reset 하기 (0) | 2021.04.14 |
---|---|
파이썬 pyside2 IP address 입력 창 만들기 - PyQt5 QLineEdit (0) | 2021.03.19 |
파이썬 변수 할당시 메모리 복사? 참조? copy deepcopy slicing (0) | 2021.03.10 |
파이썬 getattr 함수란? - 문자열 변수값과 동일한 객체 속성 불러오기 (0) | 2021.03.02 |
파이썬 pyside2 layout에 버튼, 라벨 위젯 추가시에 쓰는 함수 (0) | 2021.02.27 |