위젯의 특정 영역 위로 마우스를 가져 가면 커서 변경

JacksonPro

작은 삼각형을 그린 사용자 지정 위젯을 만들었습니다. 위젯 위에 그린 삼각형 위로 마우스를 가져 가면 커서를 변경할 수 있는지 알고 싶습니다.

참고 : 사용을 시도했지만 mouseMoveEvent클릭하지 않으면 업데이트되지 않습니다. 나도 시도 eventFilter했지만 그 방법을 입력하지 않은 것 같습니다.

다음은 동일하지 않은 유사한 코드입니다. 삼각형은 맨 아래에 있습니다. 커서가 빨간색 삼각형 위에있을 때 자동으로 업데이트되도록하고 싶습니다.

from PyQt5.QtCore import Qt, QPoint, QPointF, QEvent
from PyQt5.QtGui import QPainter, QIcon, QColor
from PyQt5.QtWidgets import *
from PyQt5 import QtCore
import sys


class Stack(QWidget):

    def __init__(self, parent=None):

        super(Stack, self).__init__(parent)
        self.cursor_x = [x for x in range(self.width() - 20, self.width())]
        self.cursor_y = [y for y in range(self.height() - 20, self.height())]


    def paintEvent(self, event):
        
        super(Stack, self).paintEvent(event)
        qp = QPainter(self)
    
        qp.setPen(Qt.white)

        qp.setBrush(Qt.white)
        qp.drawRect(10, 10, 150, 150)

        p = QPointF(self.width() - 20, self.height() - 10)
        q = QPointF(self.width() - 10, self.height() - 20)
        r = QPointF(self.width() - 10, self.height() - 10)

        qp.setPen(Qt.white)
        qp.setBrush(Qt.red)
        qp.drawPolygon(p, q, r)

    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            if event.x() in self.cursor_x and event.y() in self.cursor_y:
                print('yes')
                self.setCursor(QtCore.Qt.SizeFDiagCursor)

        super().mousePressEvent(event)

    def mouseMoveEvent(self, event):
        if event.x() in self.cursor_x and event.y() in self.cursor_y:

            self.setCursor(QtCore.Qt.SizeFDiagCursor)
        super(Stack, self).mouseMoveEvent(event)
        
    def eventFilter(self, obj, event):
        print(event)
        print('hello')
        if obj is self and event.type() == QEvent.HoverEnter:
            print("Mouse is over the label")

        super().eventFilter(event)

    def mouseReleaseEvent(self, event):
        if event.x() not in self.cursor_x and event.y() not in self.cursor_y:
            self.unsetCursor()
            super(Stack, self).mouseReleaseEvent(event)
    
if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Stack()
    win.show()
    sys.exit(app.exec_())
Eyllanesc

커서가 영역 밖에있을 때도 커서를 비활성화해야합니다. mouseMoveEvent의 경우 mouseTracking 속성을 활성화해야합니다. 마지막으로 QPolygon을 사용하여 커서가 사각형 내부 또는 외부에 있는지 확인합니다.

class Stack(QWidget):
    def __init__(self, parent=None):

        super(Stack, self).__init__(parent)
        self._triangle = QPolygon()
        self.setMouseTracking(True)

    def _recalculate_triangle(self):
        p = QPoint(self.width() - 20, self.height() - 10)
        q = QPoint(self.width() - 10, self.height() - 20)
        r = QPoint(self.width() - 10, self.height() - 10)
        self._triangle = QPolygon([p, q, r])
        self.update()

    def resizeEvent(self, event):
        self._recalculate_triangle()

    def paintEvent(self, event):
        super(Stack, self).paintEvent(event)
        qp = QPainter(self)

        qp.setPen(Qt.white)

        qp.setBrush(Qt.white)
        qp.drawRect(10, 10, 150, 150)

        qp.setPen(Qt.white)
        qp.setBrush(Qt.red)
        qp.drawPolygon(self._triangle)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton and self._triangle.containsPoint(
            event.pos(), Qt.OddEvenFill
        ):
            self.setCursor(Qt.SizeFDiagCursor)
        else:
            self.unsetCursor()

    def mouseMoveEvent(self, event):
        if self._triangle.containsPoint(event.pos(), Qt.OddEvenFill):
            self.setCursor(Qt.SizeFDiagCursor)
        else:
            self.unsetCursor()

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton and self._triangle.containsPoint(
            event.pos(), Qt.OddEvenFill
        ):
            self.setCursor(Qt.SizeFDiagCursor)
        else:
            self.unsetCursor()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Google 차트 위로 마우스를 가져 가면 커서 스타일 변경

분류에서Dev

MFC 마우스 커서를 CEdit 컨트롤 위로 가져 가면 변경

분류에서Dev

반짝이는 위젯 위로 마우스를 가져가는 동안 커서 변경

분류에서Dev

마우스를 특정 영역으로 이동할 때 화면 밝기가 변경됨 (XPS13 9379-Ubuntu)

분류에서Dev

<li> 위로 마우스를 가져 가면 div 크기 변경

분류에서Dev

다른 <li> 위로 마우스를 가져 가면 한 <li>의 배경 변경

분류에서Dev

Javascript로 Google Chart API 위로 마우스를 가져갈 때 커서 스타일을 변경하는 방법

분류에서Dev

이미지의 <영역> 위로 마우스를 가져 가면 <div>가 나타나게하는 방법

분류에서Dev

요소 위로 마우스를 가져 가면서 부드럽게 배경 변경

분류에서Dev

영역 위로 마우스를 가져갈 때 이미지 맵의 버그

분류에서Dev

하이퍼 링크 위로 마우스를 가져 가면 텍스트 변경

분류에서Dev

콘텐츠 영역 위로 마우스를 가져 가면 드롭 다운 메뉴가 나타납니다.

분류에서Dev

태그 위로 마우스를 가져 가면 정보 표시

분류에서Dev

GWT 버튼 클릭을 통해 커넥터의 Vaadin 사용자 정의 위젯에서 상태를 변경하고 서버 측에서 가져옵니다.

분류에서Dev

gmaps4rails는 사이드 바의 항목 위로 마우스를 가져 가면 마커 색상을 변경합니다.

분류에서Dev

요소 위로 마우스를 가져 가서 자식의 불투명도를 변경 하시겠습니까?

분류에서Dev

버튼 위로 마우스를 가져갈 때 범위의 CSS 색상 변경

분류에서Dev

다른 div 위로 마우스를 가져갈 때 div 변경

분류에서Dev

다른 div 위로 마우스를 가져갈 때 div 변경

분류에서Dev

gWidgetsRGtk2에서 위젯의 마우스 커서 변경

분류에서Dev

링크 위로 마우스를 가져갈 때 이미지를 커서로 설정하는 방법

분류에서Dev

subdiv 위로 마우스를 가져갈 때 기본 div의 배경 변경

분류에서Dev

:: after 요소 위로 마우스를 가져 가서 이미지 스타일 변경

분류에서Dev

특정 텍스트 위로 마우스를 가져가 그림을 표시

분류에서Dev

링크 위로 마우스를 가져 가면 Chrome 고정 div가 사라짐

분류에서Dev

이미지 위로 마우스를 가져 가면 HTML 배경이 변경됩니다.

분류에서Dev

한 요소 위로 마우스를 가져 가면 다른 요소가 변경됩니까?

분류에서Dev

한 요소 위로 마우스를 가져 가면 다른 요소가 변경됩니까?

분류에서Dev

한 요소 위로 마우스를 가져 가면 다른 요소가 변경됩니까?

Related 관련 기사

  1. 1

    Google 차트 위로 마우스를 가져 가면 커서 스타일 변경

  2. 2

    MFC 마우스 커서를 CEdit 컨트롤 위로 가져 가면 변경

  3. 3

    반짝이는 위젯 위로 마우스를 가져가는 동안 커서 변경

  4. 4

    마우스를 특정 영역으로 이동할 때 화면 밝기가 변경됨 (XPS13 9379-Ubuntu)

  5. 5

    <li> 위로 마우스를 가져 가면 div 크기 변경

  6. 6

    다른 <li> 위로 마우스를 가져 가면 한 <li>의 배경 변경

  7. 7

    Javascript로 Google Chart API 위로 마우스를 가져갈 때 커서 스타일을 변경하는 방법

  8. 8

    이미지의 <영역> 위로 마우스를 가져 가면 <div>가 나타나게하는 방법

  9. 9

    요소 위로 마우스를 가져 가면서 부드럽게 배경 변경

  10. 10

    영역 위로 마우스를 가져갈 때 이미지 맵의 버그

  11. 11

    하이퍼 링크 위로 마우스를 가져 가면 텍스트 변경

  12. 12

    콘텐츠 영역 위로 마우스를 가져 가면 드롭 다운 메뉴가 나타납니다.

  13. 13

    태그 위로 마우스를 가져 가면 정보 표시

  14. 14

    GWT 버튼 클릭을 통해 커넥터의 Vaadin 사용자 정의 위젯에서 상태를 변경하고 서버 측에서 가져옵니다.

  15. 15

    gmaps4rails는 사이드 바의 항목 위로 마우스를 가져 가면 마커 색상을 변경합니다.

  16. 16

    요소 위로 마우스를 가져 가서 자식의 불투명도를 변경 하시겠습니까?

  17. 17

    버튼 위로 마우스를 가져갈 때 범위의 CSS 색상 변경

  18. 18

    다른 div 위로 마우스를 가져갈 때 div 변경

  19. 19

    다른 div 위로 마우스를 가져갈 때 div 변경

  20. 20

    gWidgetsRGtk2에서 위젯의 마우스 커서 변경

  21. 21

    링크 위로 마우스를 가져갈 때 이미지를 커서로 설정하는 방법

  22. 22

    subdiv 위로 마우스를 가져갈 때 기본 div의 배경 변경

  23. 23

    :: after 요소 위로 마우스를 가져 가서 이미지 스타일 변경

  24. 24

    특정 텍스트 위로 마우스를 가져가 그림을 표시

  25. 25

    링크 위로 마우스를 가져 가면 Chrome 고정 div가 사라짐

  26. 26

    이미지 위로 마우스를 가져 가면 HTML 배경이 변경됩니다.

  27. 27

    한 요소 위로 마우스를 가져 가면 다른 요소가 변경됩니까?

  28. 28

    한 요소 위로 마우스를 가져 가면 다른 요소가 변경됩니까?

  29. 29

    한 요소 위로 마우스를 가져 가면 다른 요소가 변경됩니까?

뜨겁다태그

보관