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"
'Dev > python' 카테고리의 다른 글
[pyside6] QThreadPool을 이용해서 몇 개의 스레드가 활성화되어 있는지 확인하기 (1) | 2022.02.25 |
---|---|
[flask+jinja2] 서버에서 받은 html 요소가 html 문서에서 제대로 표현되게 하려면? (0) | 2022.02.06 |
[flask+jinja2] break 사용하기 (2) | 2022.02.05 |
[python] SyntaxError: Non-ASCII character '\xec' 에러 해결법 (0) | 2022.01.14 |
[python] 파이썬 에러 종류 정리(SyntaxError, TypeError, IndexError 등) (2) | 2021.06.30 |
[pyqt5] 프로그램창을 항상 가장 위에 있게 하면서 동시에 타이틀 바도 없게 하려면? (3) | 2021.06.09 |
[python] python 환경 변수 설정하기 (AppData 폴더가 왜 없지 하시는 분들을 위해) (2) | 2021.05.25 |
[python] datetime 모듈로 일, 시간, 분, 초 더하거나 빼는 방법, timedelta (2) | 2021.05.21 |