반응형
1. Concept
PyQt로 UI를 구성하다 보면 제목 표시줄 (Title Header)가 없는 위젯을 만드는 경우가 있습니다. 이때 생성된 위젯은 제목 표시줄이 없다면 일반적으로 이동이나 크기 변경이 불가능합니다.
[mousePressEvent - mouseMoveEvent - mouseReleaseEvent] 통해 위젯 내 오브젝트에서 마우스로 이동하기 위한 예제입니다. 지난 포스팅에서 다룬 그림판 GUI의 변형입니다.
deep-eye.tistory.com/13?category=442845
2. SourceCode
# Drag Event Method
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.offset = event.pos()
else:
super().mousePressEvent(event)
def mouseMoveEvent(self, event):
if self.offset is not None and event.buttons() == QtCore.Qt.LeftButton:
self.move(self.pos() + event.pos() - self.offset)
else:
super().mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
self.offset = None
super().mouseReleaseEvent(event)
Press - Move - Release로 구성된 매서드이며, 상황에 따라 LeftButton / RightButton 또는 mouseWheelEevent로 변경할 수 있습니다. 단순하지만 이런 기능 하나하나가 앤드 유저의 편리성을 극대화시켜줍니다.
3. Application
github.com/DEEPI-LAB/python-PyQt5-Tutorials.git
git clone https://github.com/DEEPI-LAB/python-PyQt5-Tutorials.git
# -*- coding: utf-8 -*-
"""
@author: Deep.I Inc. @Jongwon Kim
Revision date: 2020-12-30
See here for more information :
https://deep-eye.tistory.com
https://deep-i.net
"""
import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtCore import QTimer
from PyQt5 import QtCore
FROM_CLASS = uic.loadUiType("ui.ui")[0]
class Windows(QMainWindow,FROM_CLASS):
def __init__(self):
super().__init__()
# setup user interface
self.setupUi(self)
# Widget Setup
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.show()
# Timer Application
self.time = 0
self.timer = QTimer(self)
self.timer.timeout.connect(self.Timer)
self.timer.start(1000)
# Timer
def Timer(self):
self.time += 1
self.lcdNumber.display(self.time)
# Drag Event Method
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.offset = event.pos()
else:
super().mousePressEvent(event)
def mouseMoveEvent(self, event):
if self.offset is not None and event.buttons() == QtCore.Qt.LeftButton:
self.move(self.pos() + event.pos() - self.offset)
else:
super().mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
self.offset = None
super().mouseReleaseEvent(event)
if __name__ == '__main__':
app = QApplication(sys.argv)
ShowApp = Windows()
sys.exit(app.exec_())
4. Reference
stackoverflow.com/questions/58901806/how-to-make-my-title-less-window-drag-able-in-pyqt5
Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발
인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
반응형
'Python > PyQt' 카테고리의 다른 글
[Python] PyQt5에서 URL 링크 만들기 (하이퍼링크 버튼) (0) | 2021.02.23 |
---|---|
[Python] PyQt5를 이용한 GUI 환경 구축하기 #1 QMainWindow 실행 (0) | 2020.12.31 |
[Python] PyQt5 리소스 파일 Import error 해결 방법 "No module named 'icon_rc'" (0) | 2020.12.01 |
[Python] PyQt 에서 로딩(애니메이션) 화면 구현하기 (2) | 2020.11.23 |
[Python] PyQt를 이용하여 마우스로 직선 그리기 (0) | 2020.10.20 |