Отключение кнопки «Развернуть» в PyQt: методы и примеры кода

В PyQt кнопка «Развернуть» — это обычная функция окон, которая позволяет пользователям максимизировать или восстановить размер окна приложения. Однако в некоторых случаях вам может потребоваться отключить кнопку «Развернуть», чтобы ограничить возможности изменения размера вашего приложения. В этой статье мы рассмотрим различные методы достижения этой цели в PyQt, а также приведем примеры кода для каждого подхода.

Метод 1: использование WindowFlags
Первый метод включает изменение флагов главного окна приложения. Удалив флаг Qt.WindowMaximizeButtonHint из флагов окна, мы можем эффективно отключить кнопку «Развернуть».

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QMainWindow()
    window.setWindowFlags(window.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)
    window.show()
    sys.exit(app.exec_())
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QMouseEvent
class CustomTitleBar(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowFlags(Qt.FramelessWindowHint)
    def mousePressEvent(self, event: QMouseEvent):
        if event.button() == Qt.LeftButton:
            self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
        event.accept()
    def mouseMoveEvent(self, event: QMouseEvent):
        if event.buttons() == Qt.LeftButton:
            self.move(event.globalPos() - self.dragPosition)
        event.accept()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = CustomTitleBar()
    window.show()
    sys.exit(app.exec_())

Метод 3: переопределение события изменения размера
Третий метод включает в себя создание подкласса QMainWindow и переопределение метода resizeEvent. Игнорируя события изменения размера и вручную устанавливая размер окна, мы можем эффективно отключить кнопку «Развернуть».

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QSize
class CustomWindow(QMainWindow):
    def __init__(self):
        super().__init__()
    def resizeEvent(self, event):
        self.setFixedSize(QSize(400, 300))  # Set a fixed window size
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = CustomWindow()
    window.show()
    sys.exit(app.exec_())