DEEP.I - Lab

오프라인 공간의 지능화를 꿈꾸는 딥아이 연구실입니다.

Python/PyQt

[PyQt] 제목 표시줄 없는 Widget을 마우스로 이동시키기

Jongwon Kim 2020. 12. 30. 17:53
반응형

1. Concept

PyQt로 UI를 구성하다 보면 제목 표시줄 (Title Header)가 없는 위젯을 만드는 경우가 있습니다. 이때 생성된 위젯은 제목 표시줄이 없다면 일반적으로 이동이나 크기 변경이 불가능합니다. 

 

[mousePressEvent - mouseMoveEvent - mouseReleaseEvent] 통해 위젯 내 오브젝트에서 마우스로 이동하기 위한 예제입니다. 지난 포스팅에서 다룬 그림판 GUI의 변형입니다.

 

deep-eye.tistory.com/13?category=442845

 

[Python] PyQt를 이용하여 마우스로 직선 그리기

PyQt5를 이용한 마우스로 직선 그리기 python의 PyQt을 이용하여 일반적인 그림판과 같이 다양한 도형체를 그릴수 있습니다. 이러한 작업이 프로그램에 녹아들어 유저 인터페이스와 연결되기 위해

deep-eye.tistory.com

 

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

 

DEEPI-LAB/python-PyQt5-Tutorials

Contribute to DEEPI-LAB/python-PyQt5-Tutorials development by creating an account on GitHub.

github.com

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

 

How to make my title less Window drag-able in PyQt5?

I want to build a window which has no title bar, so i do. But it is not any more draggable. You cannot make my window move from here to there. I know it is because of me, removing the title bar, ...

stackoverflow.com

Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발

인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
 

딥아이 DEEP.I | AI 기반 지능형 기업 솔루션

딥아이는 AI 기술의 정상화라는 목표를 갖고, 최첨단 딥러닝 기술 기반의 기업 솔루션을 제공하고 있으며, 이를 통해 고도의 AI 기반 객체 탐지, 분석, 추적 기능을 통합하여 다양한 산업 분야에

deep-i.ai

 

 

반응형