파이썬
[pyside2] pyqt에서 클릭할 수 없는 객체 클릭 이벤트 만들기
mistive
2020. 4. 20. 11:14
진짜 겁나 간단하다.
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() 함수만 다른걸로 바꿔주면 여러가지 이벤트를 다양하게 생성할 수 있다는 의미이다.
개 꿀