RubberBandを表示する

PySideでマウスのドラッグ&ドロップで範囲を表示したい場合は
QRubberBandを使用するとかんたんに作ることができます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# -*- coding: utf-8 -*-

import sys
from PySide2.QtWidgets import QDialog, QRubberBand, QApplication
from PySide2.QtCore import QRect


class RubberBandTest(QDialog):

    rubber_band = None

    def __init__(self, parent=None):
        super().__init__(parent)

        self.resize(300, 300)

    def mousePressEvent(self, e):

        self.origin = e.pos()
        if not self.rubber_band:
            self.rubber_band = QRubberBand(QRubberBand.Rectangle, self)
            self.rubber_band.setGeometry(QRect(self.origin, e.pos()).normalized())
            self.rubber_band.show()

    def mouseMoveEvent(self, e):

        self.rubber_band.setGeometry(QRect(self.origin, e.pos()).normalized())

    def mouseReleaseEvent(self, e):

        self.rubber_band.hide()
        self.rubber_band = None


if __name__ == '__main__':
    app = QApplication(sys.argv)
    a = RubberBandTest()
    a.show()
    sys.exit(app.exec_())