2022-06-07 21:19:49

pyside 또는 pyqt로 응용 프로그램을 만들다보면 윈도우 타이틀바에서 닫기 버튼, 최소화 버튼, 최대화 버튼 등을 비활성화시키고 싶은 경우가 있습니다. 참고로 응용 프로그램에서 이런 걸 윈도우(창) 타이틀바라고 부릅니다. 타이틀 바에는 일반적으로 프로그램의 아이콘, 이름, 최소화버튼, 최대화버튼, 닫기버튼 등이 포함되어 있습니다.

 

 

닫기 버튼 비활성화

닫기 버튼을 비활성화시키고 싶다면 다음 코드 한 줄을 적절한 위치에 삽입해주면 됩니다. 

 

self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint)

 

저는 해당 클래스의 __init__ 함수 내에 삽입해줬습니다. 실행해봤더니 다음과 같이 닫기 버튼이 비활성화되었습니다. 

 

 

최대화 버튼 비활성화

이번에는 최대화 버튼을 비활성화해보겠습니다. Qt.WindowCloseButtonHint가 추가되고, Qt.WindowMaximizeButtonHint는 빠진 것을 확인하실 수 있습니다. 

 

self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint)

 

 

최소화 버튼 비활성화

최소화 버튼도 비활성화해볼까요? 이번에는 Qt.WindowMinimizeButtonHint가 빠졌죠?

 

self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowMaximizeButtonHint | Qt.WindowCloseButtonHint)

 

 

위 내용을 잘 응용하면 두 개 이상을 비활성화하는 것도 가능하겠죠?

 

최소화 버튼과 닫기 버튼 비활성화하기

 

self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowMaximizeButtonHint)

 

 

최소화 버튼과 최대화 버튼 안보이게 하기

 

self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint)

 

 

위와 같이 코드를 넣어주니, 이번에는 옅은 회색으로 비활성화되지 않고 아예 버튼들이 보이지 않게 되는군요. 왜 이렇게 되는지 이유는 잘 모르겠지만, 아무튼 이렇게 됩니다. 최소화 또는 최대화 버튼이 하나도 포함되지 않으면 이렇게 처리되게 설계가 된 것 같습니다. ㅎㅎ

 

관련 글

[pyqt5] 프로그램창을 항상 가장 위에 있게 하면서 동시에 타이틀 바도 없게 하려면?    

 

참고자료

[1] https://www.qtcentre.org/threads/13198-How-to-hide-Close-Button-quot-X-quot-on-Widget