Как с помощью мыши, изменить размер прозрачного окна?
Перетаскивание окошка я реализовал.
А как размер изменить не могу понять.
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QDesktopWidget, QMessageBox
from PyQt5.QtWidgets import QTextBrowser, QGridLayout, QLabel, QCheckBox, qApp
from PyQt5.QtCore import QPoint, QObject, QThread, pyqtSignal, QRect, QSize, QTimer
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap, QPalette, QBrush, QImage, QCursor
from PIL import Image, ImageDraw
# Отловить ошибки в слотах PyQt5
def log_uncaught_exceptions(ex_cls, ex, tb):
text = '{}: {}:\n'.format(ex_cls.__name__, ex)
import traceback
text += ''.join(traceback.format_tb(tb))
print(text)
QMessageBox.critical(None, 'Упс! Ошибочка...', text)
quit()
sys.excepthook = log_uncaught_exceptions
class DisplayWindow(QWidget):
def __init__(self):
super().__init__()
self.interface()
def interface(self):
self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint)
self.setWindowFlag(Qt.WindowStaysOnTopHint)
self.setGeometry(200, 200, 300, 535)
image = Image.new(mode='RGBA', size=(300, 535))
draw = ImageDraw.Draw(image)
draw.rectangle((0, 0, 300, 535),outline='blue', width=5)
del draw
pixmap = QPixmap(image.toqpixmap())
palette = self.palette()
palette.setBrush(QPalette.Normal, QPalette.Window, QBrush(pixmap))
palette.setBrush(QPalette.Inactive, QPalette.Window, QBrush(pixmap))
self.setPalette(palette)
self.setMask(pixmap.mask())
def drag_window(self, event):
delta = QPoint(event.globalPos() - self.old_position)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.old_position = event.globalPos()
def mousePressEvent(self, event):
"""Выбрать окно при помощи мыши"""
self.old_position = event.globalPos()
def mouseMoveEvent(self, event):
self.drag_window(event)
def main():
application = QApplication(sys.argv)
display_window = DisplayWindow()
display_window.show()
sys.exit(application.exec_())
if __name__ == '__main__':
main()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Обратите внимание класс DisplayWindow наследуется от QDialog
sizeGripEnabled : bool
Это свойство указывает, включена ли
gripразмера.
QSizeGripпомещается в нижний правый угол диалогового окна, когда это свойство включено. По умолчанию ручка размера отключена.
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QDesktopWidget, QMessageBox, QDialog
from PyQt5.QtWidgets import QTextBrowser, QGridLayout, QLabel, QCheckBox, qApp
from PyQt5.QtCore import QPoint, QObject, QThread, pyqtSignal, QRect, QSize, QTimer
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap, QPalette, QBrush, QImage, QCursor
from PIL import Image, ImageDraw
# Отловить ошибки в слотах PyQt5
def log_uncaught_exceptions(ex_cls, ex, tb):
text = '{}: {}:\n'.format(ex_cls.__name__, ex)
import traceback
text += ''.join(traceback.format_tb(tb))
print(text)
QMessageBox.critical(None, 'Упс! Ошибочка...', text)
quit()
sys.excepthook = log_uncaught_exceptions
class DisplayWindow(QDialog): # - QWidget, +++ !!! QDialog
def __init__(self):
super().__init__()
self.resize(300, 535) # +
self.setMinimumSize(QSize(100, 100))
self.w = 300 # +
self.h = 535 # +
self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint) # +
self.setWindowFlag(Qt.WindowStaysOnTopHint) # +
self.interface()
self.setSizeGripEnabled(True) # +++ !!!
def interface(self):
# self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint)
# self.setWindowFlag(Qt.WindowStaysOnTopHint)
# self.setGeometry(200, 200, 300, 535)
# self.resize(300, 535)
# image = Image.new(mode='RGBA', size=(300, 535))
image = Image.new(mode='RGBA', size=(self.w, self.h)) # +++ self.w, self.h
draw = ImageDraw.Draw(image)
# draw.rectangle((0, 0, 300, 535),outline='blue', width=5)
draw.rectangle((0, 0, self.w, self.h),outline='blue', width=5) # +++ self.w, self.h
del draw
pixmap = QPixmap(image.toqpixmap())
palette = self.palette()
palette.setBrush(QPalette.Normal, QPalette.Window, QBrush(pixmap))
palette.setBrush(QPalette.Inactive, QPalette.Window, QBrush(pixmap))
self.setPalette(palette)
self.setMask(pixmap.mask())
def drag_window(self, event):
delta = QPoint(event.globalPos() - self.old_position)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.old_position = event.globalPos()
def mousePressEvent(self, event):
"""Выбрать окно при помощи мыши"""
self.old_position = event.globalPos()
def mouseMoveEvent(self, event):
self.drag_window(event)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def resizeEvent(self, event):
self.w = self.width()
self.h = self.height()
self.interface()
super().resizeEvent(event)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def main():
application = QApplication(sys.argv)
display_window = DisplayWindow()
display_window.show()
sys.exit(application.exec_())
if __name__ == '__main__':
main()
