Проблема с программой, связанная с пустым окном. PyQt5
Проблема заключается в том, что я хотел написать программу у которой нет оконного режима(то есть нет поверхностного интерфейса, кнопки закрыть и свернуть) и мне это удалось сделать, но это окно теперь нельзя перетащить. Я воспользовался этим кодом:
class Widget(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.setupUi(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Нужно перекрыть методы-события:
- В mousePressEvent фиксируется клик кнопки мышки
- В mouseReleaseEvent отпускание кнопки мышки
- В mouseMoveEvent выполняется перемещение окна
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton
from PyQt5.QtCore import Qt
class Widget(QWidget):
def __init__(self):
super().__init__()
self.setWindowFlags(Qt.FramelessWindowHint)
self._old_pos = None
layout = QVBoxLayout()
layout.addStretch()
layout.addWidget(QPushButton("Закрыть окно", clicked=self.close))
self.setLayout(layout)
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__':
app = QApplication([])
w = Widget()
w.resize(400, 400)
w.show()
app.exec()
Автор решения: S. Nick
→ Ссылка
или так
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
def paintEvent(self, ev):
painter = QtGui.QPainter(self)
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.setBrush(QtGui.QColor(195, 195, 255))
painter.setPen(QtCore.Qt.NoPen)
painter.drawRoundedRect(self.rect(), 10.0, 10.0)
def mousePressEvent(self, event): # <<<-----
self.oldPos = event.globalPos()
def mouseMoveEvent(self, event): # <<<-----
delta = QtCore.QPoint (event.globalPos() - self.oldPos)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.oldPos = event.globalPos()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())