В 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_())