진짜 겁나 간단하다.
https://wiki.python.org/moin/PyQt/Making%20non-clickable%20widgets%20clickable
관련 문서는 바로 위 링크에 있다.
def clickable(widget):
class Filter(QObject):
clicked = pyqtSignal() #pyside2 사용자는 pyqtSignal() -> Signal()로 변경
def eventFilter(self, obj, event):
if obj == widget:
if event.type() == QEvent.MouseButtonRelease:
if obj.rect().contains(event.pos()):
self.clicked.emit()
# The developer can opt for .emit(obj) to get the object within the slot.
return True
return False
filter = Filter(widget)
widget.installEventFilter(filter)
return filter.clicked
위의 코드를 내가 사용하고 싶은 곳에 복붙을 한다.
clickable(label1).connect(self.showText1)
clickable('내가 이벤트를 발생시키고 싶은 객체').connect('발생시킬 이벤트 함수')
이런 식으로 작성해주면 아주 잘 작동한다.
-> 단순히 라벨뿐만 아니라 프레임, widget 등 QObject 객체라면 모두 사용이 가능하다.
connect 함수에서 파라미터를 보내고 싶으면 lambda 함수를 사용하면 되고 ㅎㅎ
위의 코드를 보면 clicked라는 이름의 시그널을 생성하고, 이벤트 중 마우스 클릭 이벤트가 발생하면, 해당 이벤트 발생 위치를 분석해서 그 위치가 오브젝트의 사각형 안에 들어갈 경우 click signal을 emit해주는 것.
한마디로 QEvent.mousebuttonRelease() 함수만 다른걸로 바꿔주면 여러가지 이벤트를 다양하게 생성할 수 있다는 의미이다.
개 꿀
'파이썬' 카테고리의 다른 글
[pyinstaller] 파이썬 실행파일 만들어주는 pyinstaller 활용백서 (5) | 2020.08.20 |
---|---|
[python 3.6~] 파이썬에서도 타입 선언이 된다고?? (0) | 2020.05.14 |
[pyside2] 위젯을 활용하여 반복 되는 형식 집어넣기 (0) | 2020.04.01 |
[python] 실행파일 자동 실행 (0) | 2020.03.31 |
[아나콘다3] 아나콘다 환경변수 설정 (0) | 2020.03.09 |