Изменение размера безрамочного окна
Столкнулся с проблемой: у безрамочного виджета (с флагом FramelessWindowHint) фиксированный размер.
Как сделать изменяемым?
import sys
from PySide6.QtWidgets import QLabel, QApplication
from PySide6 import QtCore
class label(QLabel):
def __init__(self):
super(label, self).__init__()
self.old_pos = None
self.setGeometry(200, 200, 300, 400)
self.setWindowFlag(QtCore.Qt.WindowType.FramelessWindowHint)
self.setText("Window")
self.setAlignment(QtCore.Qt.AlignHCenter)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.old_pos = event.pos()
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.old_pos = None
def mouseMoveEvent(self, event):
if not self.old_pos:
return
self.delta = event.pos() - self.old_pos
self.move(self.pos() + self.delta)
if __name__ == "__main__":
app = QApplication([])
lbl = label()
lbl.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Самый простой вариант.
Класс QSizeGrip предоставляет дескриптор изменения размера окон верхнего уровня.
Для главного окна лучше использовать класс QWidget или QMainWindow, а не QLabel.
import sys
'''
from PySide6.QtWidgets import QLabel, QApplication
from PySide6 import QtCore
'''
from PyQt5.Qt import *
from PyQt5 import QtWidgets, QtCore, QtGui
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowFlag(QtCore.Qt.WindowType.FramelessWindowHint)
self.setStyleSheet('background: #55f;')
self.setStyleSheet("border: 1px solid #fff; background-color: #55f;")
self.old_pos = None
self.label = QLabel('Hellow Label', alignment=QtCore.Qt.AlignCenter)
self.label.setStyleSheet('background:#99f; font-size: 24px;')
self.sizeGrip1 = QSizeGrip(self)
self.sizeGrip2 = QSizeGrip(self)
self.sizeGrip2.setStyleSheet("""
QSizeGrip {
width: 10px; height: 10px; margin: 3px
}
QSizeGrip:hover {background-color: rgb(222, 42, 94) }
""")
self.sizeGrip2.setToolTip("<b style='color:#fff;'>Resize Window</b>")
layout = QGridLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.sizeGrip1, 0, 0)
layout.addWidget(self.label, 1, 1)
layout.addWidget(self.sizeGrip2, 2, 2)
layout.setRowStretch(1, 1)
layout.setColumnStretch(1, 1)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.old_pos = event.pos()
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.old_pos = None
def mouseMoveEvent(self, event):
if not self.old_pos:
return
self.delta = event.pos() - self.old_pos
self.move(self.pos() + self.delta)
if __name__ == "__main__":
app = QApplication([])
w = MainWindow()
w.setWindowTitle('Window')
w.resize(300, 400)
w.show()
sys.exit(app.exec())
Не пугайтесь моей раскраски, я сделал это специально, чтобы вам было все видно. Все можно раскрасить как вам будет угодно.
