Как перемещать приложение, если шапка скрыта

Подскажите, пожалуйста, как мне реализовать перемещение приложения, которое написано на PyQt5?
Нашла в интернете пару вариантов, как это можно сделать, но реализовать не смогла. Я не слишком сильна в PyQt, поэтому проблему понять не могу.

Ниже представлен код в котором пыталась это сделать.

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(431, 571)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 0, 431, 571))
        self.frame.setStyleSheet("background-color: rgb(200, 191, 231);\n"
"border-radius: 1px;\n"
"")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(20, 10, 171, 71))
        font = QtGui.QFont()
        font.setFamily("Tempus Sans ITC")
        font.setPointSize(22)
        self.label.setFont(font)
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("iconaglav.png"))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")
        self.btn_exit = QtWidgets.QPushButton(self.frame)
        self.btn_exit.setGeometry(QtCore.QRect(390, 10, 28, 28))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)
        self.btn_exit.setFont(font)
        self.btn_exit.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_exit.setStyleSheet("QPushButton {\n"
"background-color: rgb(236, 223, 235);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(170, 108, 163);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_exit.setObjectName("btn_exit")
        self.btn_start = QtWidgets.QPushButton(self.frame)
        self.btn_start.setGeometry(QtCore.QRect(160, 530, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)
        self.btn_start.setFont(font)
        self.btn_start.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_start.setStyleSheet("QPushButton {\n"
"background-color: rgb(236, 223, 235);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(170, 108, 163);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_start.setObjectName("btn_start")
        self.listWidget = QtWidgets.QListWidget(self.frame)
        self.listWidget.setGeometry(QtCore.QRect(10, 90, 411, 421))
        self.listWidget.setStyleSheet("QListWidget {\n"
"background-color: rgb(245, 245, 245);\n"
"border-radius:5px;\n"
"}")
        self.listWidget.setObjectName("listWidget")
        self.btn_sver = QtWidgets.QPushButton(self.frame)
        self.btn_sver.setGeometry(QtCore.QRect(350, 10, 28, 28))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.btn_sver.setFont(font)
        self.btn_sver.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_sver.setStyleSheet("QPushButton {\n"
"background-color: rgb(236, 223, 235);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(170, 108, 163);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_sver.setObjectName("btn_sver")
        self.btn_info = QtWidgets.QPushButton(self.frame)
        self.btn_info.setGeometry(QtCore.QRect(390, 60, 25, 25))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        self.btn_info.setFont(font)
        self.btn_info.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_info.setStyleSheet("QPushButton {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_info.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("inform.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.btn_info.setIcon(icon)
        self.btn_info.setIconSize(QtCore.QSize(25, 25))
        self.btn_info.setFlat(True)
        self.btn_info.setObjectName("btn_info")
        self.btn_nastr = QtWidgets.QPushButton(self.frame)
        self.btn_nastr.setGeometry(QtCore.QRect(360, 60, 25, 25))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        self.btn_nastr.setFont(font)
        self.btn_nastr.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_nastr.setStyleSheet("QPushButton {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_nastr.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("nastroiki.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.btn_nastr.setIcon(icon1)
        self.btn_nastr.setIconSize(QtCore.QSize(25, 25))
        self.btn_nastr.setFlat(True)
        self.btn_nastr.setObjectName("btn_nastr")
        self.btn_exit.raise_()
        self.btn_start.raise_()
        self.listWidget.raise_()
        self.btn_sver.raise_()
        self.btn_info.raise_()
        self.btn_nastr.raise_()
        self.label.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.old_pos = None
       
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.pos()

    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = None

    def mouseMoveEvent(self, event):
        if not self.old_pos:
            return

        delta = event.pos() - self.old_pos
        self.move(self.pos() + delta)
    
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btn_exit.setText(_translate("MainWindow", "X"))
        self.btn_start.setText(_translate("MainWindow", "ЗАПИСЬ"))
        self.btn_sver.setText(_translate("MainWindow", "–"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    MainWindow.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint)
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
    ```

Ответы (1 шт):

Автор решения: S. Nick

НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(431, 571)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 0, 431, 571))
        self.frame.setStyleSheet("background-color: rgb(200, 191, 231);\n"
"border-radius: 1px;\n"
"")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(20, 10, 171, 71))
        font = QtGui.QFont()
        font.setFamily("Tempus Sans ITC")
        font.setPointSize(22)
        self.label.setFont(font)
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("iconaglav.png"))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")
        self.btn_exit = QtWidgets.QPushButton(self.frame)
        self.btn_exit.setGeometry(QtCore.QRect(390, 10, 28, 28))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)
        self.btn_exit.setFont(font)
        self.btn_exit.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_exit.setStyleSheet("QPushButton {\n"
"background-color: rgb(236, 223, 235);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(170, 108, 163);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_exit.setObjectName("btn_exit")
        self.btn_start = QtWidgets.QPushButton(self.frame)
        self.btn_start.setGeometry(QtCore.QRect(160, 530, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)
        self.btn_start.setFont(font)
        self.btn_start.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_start.setStyleSheet("QPushButton {\n"
"background-color: rgb(236, 223, 235);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(170, 108, 163);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_start.setObjectName("btn_start")
        self.listWidget = QtWidgets.QListWidget(self.frame)
        self.listWidget.setGeometry(QtCore.QRect(10, 90, 411, 421))
        self.listWidget.setStyleSheet("QListWidget {\n"
"background-color: rgb(245, 245, 245);\n"
"border-radius:5px;\n"
"}")
        self.listWidget.setObjectName("listWidget")
        self.btn_sver = QtWidgets.QPushButton(self.frame)
        self.btn_sver.setGeometry(QtCore.QRect(350, 10, 28, 28))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.btn_sver.setFont(font)
        self.btn_sver.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_sver.setStyleSheet("QPushButton {\n"
"background-color: rgb(236, 223, 235);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(170, 108, 163);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_sver.setObjectName("btn_sver")
        self.btn_info = QtWidgets.QPushButton(self.frame)
        self.btn_info.setGeometry(QtCore.QRect(390, 60, 25, 25))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        self.btn_info.setFont(font)
        self.btn_info.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_info.setStyleSheet("QPushButton {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_info.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("inform.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.btn_info.setIcon(icon)
        self.btn_info.setIconSize(QtCore.QSize(25, 25))
        self.btn_info.setFlat(True)
        self.btn_info.setObjectName("btn_info")
        self.btn_nastr = QtWidgets.QPushButton(self.frame)
        self.btn_nastr.setGeometry(QtCore.QRect(360, 60, 25, 25))
        font = QtGui.QFont()
        font.setFamily("Gadugi")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        self.btn_nastr.setFont(font)
        self.btn_nastr.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn_nastr.setStyleSheet("QPushButton {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius: 10px;\n"
"}\n"
"QPushButton:hover {\n"
"background-color: rgb(200, 191, 231);\n"
"border-radius:10px;\n"
"}\n"
"QPushButton:pressed {\n"
"background-color: rgb(188, 139, 182);\n"
"border-radius:10px;\n"
"}\n"
"")
        self.btn_nastr.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("nastroiki.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.btn_nastr.setIcon(icon1)
        self.btn_nastr.setIconSize(QtCore.QSize(25, 25))
        self.btn_nastr.setFlat(True)
        self.btn_nastr.setObjectName("btn_nastr")
        self.btn_exit.raise_()
        self.btn_start.raise_()
        self.listWidget.raise_()
        self.btn_sver.raise_()
        self.btn_info.raise_()
        self.btn_nastr.raise_()
        self.label.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
       
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
   
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btn_exit.setText(_translate("MainWindow", "X"))
        self.btn_start.setText(_translate("MainWindow", "ЗАПИСЬ"))
        self.btn_sver.setText(_translate("MainWindow", "–"))


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint)
        self.old_pos = None

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.pos()

    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = None

    def mouseMoveEvent(self, event):
        if not self.old_pos:
            return

        delta = event.pos() - self.old_pos
        self.move(self.pos() + delta)        


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка