2021-11-29 10:46:41

pyqt나 pyside로 데스크탑 응용 프로그램을 만들 때 타이틀바를 없앤 형태로 프로그램을 만드는 경우가 있습니다. 이러한 프로그램들은 타이틀바가 없기 때문에 모니터 화면 상에서 이동시키기 위해서 별도의 처리를 해줘야 합니다. 

 

class MainWindow(QMainWindow)와 같은 클래스 내에 다음과 같은 함수들을 추가해주면 됩니다.

 

def mousePressEvent(self, event):
    self.oldPos = event.globalPos()

def mouseMoveEvent(self, event):
    delta = QPoint(event.globalPos() - self.oldPos)
    self.move(self.x() + delta.x(), self.y() + delta.y())
    self.oldPos = event.globalPos()

 

그런데 언젠가부터 위 코드로 프로그램을 실행했을 때 다음과 같은 DeprecationWarning이 뜨기 시작했습니다.

 

 

DeprecationWarning은 라이브러리가 추후에 업데이트되면 더 이상 그러한 기능을 지원하지 않을 때 나오는 경고 메시지입니다. 따라서 당장 크리티컬한 문제는 아니지만, 프로그램을 계속해서 업그레이드 해가며 서비스를 제공할 생각을 갖고 있다면 경고 메시지가 뜨지 않게 처리해주는 것이 좋습니다. 다음과 같이 코드를 수정해주면 됩니다.

 

event.globalPos()를 모두 event.globalPostion().toPoint()로 바꿔준 것 밖에 없습니다.

 

def mousePressEvent(self, event):
    self.oldPos = event.globalPosition().toPoint()

def mouseMoveEvent(self, event):
    delta = QPoint(event.globalPosition().toPoint() - self.oldPos)
    self.move(self.x() + delta.x(), self.y() + delta.y())
    self.oldPos = event.globalPosition().toPoint()

 

위와 같이 코드를 수정한 이후에는 더 이상 창을 옮길 때 경고 메시지가 뜨지 않습니다.

 

(이 글은 2022-04-04에 마지막으로 수정되었습니다)

 

참고자료

[1] https://stackoverflow.com/questions/67723421/deprecationwarning-function-when-moving-app-removed-titlebar-pyside6, stackoverflow, "DeprecationWarning: Function when moving app (removed titlebar) - PySide6"