Как перемещать приложение, если шапка скрыта
Подскажите, пожалуйста, как мне реализовать перемещение приложения, которое написано на 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_())
