목차
파이썬 PySide 마우스 클릭 이벤트
앞서 포스트의 내용처럼 마우스(Mouse) 설정을 class 내에서 진행하도록 하겠습니다. 마우스 관련 내용 이 외에 이해가 안되신다면 PySide 카테고리의 다른 글들을 보시면 쉽게 이해할 수 있습니다.
마우스 이벤트(Mouse event)는 QPushButton 함수에서 관리합니다. 우선 간단하게 아래에 마우스 클릭 시에 Hello 메세지를 전달하는 코드를 작성해보겠습니다. 마우스가 클릭하는 경우 인터럽트(Interrupt)가 발생해서 PySide GUI가 반응합니다.
예제 코드>>
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
from PySide6.QtCore import QSize
import sys
class Qt_Ex(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Qt Example")
self.setFixedSize(QSize(250, 100))
btn = QPushButton("버튼")
btn.setCheckable(True)
btn.clicked.connect(self.btn_clicked)
self.setCentralWidget(btn)
def btn_clicked(self):
print("Hello")
app = QApplication(sys.argv)
window = Qt_Ex()
window.show()
app.exec()
결과>>
Hello
Hello
주석>>
btn = QPushButton("버튼")
btn.setCheckable(True)
btn.clicked.connect(self.btn_clicked)
self.setCentralWidget(btn)
버튼 객체를 btn으로 생성하고 클릭(Click) 발생 시 클래스 내부의 btn_clicked라는 함수를 실행합니다.
setCheckable은 마우스를 체크 했는 지 여부를 True, False로 전달해주는 것을 결정하는 함수로 여기 예제에서는 사용안해도 됩니다.
파이썬 PySide 마우스 이벤트 종류 및 기능
이번에는 아래 이벤트에 대해 동작하는 코드를 알아 보겠습니다.
- 마우스 클릭하고 움직이는 경우
- 마우스 클릭한 경우
- 마우스 클릭한 것 푼 경우
- 마우스 더블 클릭 한 경우
예제 코드로 쉽게 알아보겠습니다.
예제 코드>>
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
from PySide6.QtCore import QSize
import sys
class Qt_Ex(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Qt Example")
self.setFixedSize(QSize(250, 100))
self.label = QLabel("마우스 이벤트")
self.setCentralWidget(self.label)
def mouseMoveEvent(self, e):
self.label.setText("mouseMoveEvent")
print("mouseMoveEvent")
def mousePressEvent(self, e):
self.label.setText("mousePressEvent")
print("mousePressEvent")
def mouseReleaseEvent(self, e):
self.label.setText("mouseReleaseEvent")
print("mouseReleaseEvent")
def mouseDoubleClickEvent(self, e):
self.label.setText("mouseDoubleClickEvent")
print("mouseDoubleClickEvent")
app = QApplication(sys.argv)
window = Qt_Ex()
window.show()
app.exec()
결과>>
mousePressEvent
mouseReleaseEvent
mousePressEvent
mouseReleaseEvent
mouseDoubleClickEvent
mouseReleaseEvent
mousePressEvent
mouseReleaseEvent
mousePressEvent
mouseReleaseEvent
mouseDoubleClickEvent
mouseReleaseEvent
mousePressEvent
mouseMoveEvent
mouseMoveEvent
def mouseMoveEvent(self, e):
self.label.setText("mouseMoveEvent")
print("mouseMoveEvent")
나머지 함수들도 이벤트(event) 성질에 따라 동작하고 구성은 동일하니 위 함수만 설명하겠습니다. event handler에서 이벤트를 주관하므로 위와 같이 함수 이름들을 정확하게 입력하여야 event 핸들러가 처리 합니다. 그리고 이벤트 발생을 함수의 e 로 전달 받습니다.
위와 같이 이벤트 발생 시 GUI의 라벨을 변경하고 print 문으로 어떤 이벤트가 발생했는지 기록하게 만들었습니다.
핸들러 명 | 정의 |
mouseMoveEvent | 마우스 클릭 후 움질일 경우 |
mousePressEvent | 마우스 버튼 클릭 |
mouseReleaseEvent | 마우스 버튼 클릭 해제 |
mouseDoubleClickEvent | 마우스 더블 클릭 |
파이썬 PySide 마우스 오른쪽, 왼쪽 , 가운데 버튼 인식
앞서 코드는 마우스의 오른쪽 왼쪽 가운데(휠) 버튼에 관계없이 클릭이나 해제를 인식하였습니다. 아래 예제 코드는 버튼의 위치에 따라 인식하는 방법입니다. 별도의 주석 없이 충분이 이해가 될 것으로 생각해서 코드만 남겨 놓겠습니다.
예제 코드>>
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
from PySide6.QtCore import QSize, Qt
import sys
class Qt_Ex(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Qt Example")
self.setFixedSize(QSize(250, 100))
self.label = QLabel("마우스 이벤트")
self.setCentralWidget(self.label)
def mousePressEvent(self, e):
if e.button() == Qt.LeftButton:
print("Press_Left")
elif e.button() == Qt.MiddleButton:
print("Press_Middle")
elif e.button() == Qt.RightButton:
print("Press_Right")
def mouseReleaseEvent(self, e):
if e.button() == Qt.LeftButton:
print("Release_Left")
elif e.button() == Qt.MiddleButton:
print("Release_Middle")
elif e.button() == Qt.RightButton:
print("Release_Right")
app = QApplication(sys.argv)
window = Qt_Ex()
window.show()
app.exec()
결과>>
Press_Left
Release_Left
Press_Right
Release_Right
Press_Middle
Release_Middle
'파이썬(Python) > PySide' 카테고리의 다른 글
[Python] Pyside 레이아웃 설정, 수직, 수평, 겹치기, 그리드(Layout, Vertical, Horizontal, Stack, Grid) (0) | 2022.12.09 |
---|---|
[Python] PySide 라벨 위치, 폰트, 글자 크기(Pont, Size, Type) (0) | 2022.12.05 |
[Python] PySide 위젯 종류 및 기능(Widget) (0) | 2022.12.02 |
[Python] PySide 라벨 키보드 이벤트 (Lable, Keyboard, Event) (0) | 2022.12.01 |
[PySide6] PyQt란? Hello World 출력하기 (0) | 2022.11.22 |