2017-10-30 56 views
1

간단한 문제를 해결하면서 해결할 수 없습니다. Python-3.6 및 PyQt5로 작업하고 있습니다. 내가 원하는 무엇QTabWidget 탭에서 마우스 커서를 설정하는 방법

변화에 마우스 커서 사용자가 비활성 탭 위에 마우스가있을 때 (그는 활성 탭을 변경하려면 그것을 클릭 할 수 이해하기)이다. 그리고 이것은 Qt Designer에서 커서 매개 변수를 변경하면이 작업을 수행 할 수 있기 때문에 내용이 아닌 비활성 탭에서만 사용할 수 있습니다. 몇 시간 동안 인터넷에서이 답변을 찾았지만 원하는 것을 찾지 못했습니다. 스타일 시트 속성을 처리해야한다고 생각하지만 어떻게 해야할지 모르겠다. (아마도 QTabWidget :: pane과 비슷한 것으로 보인다). 누군가 나를 기쁘게 도와 줄 수 있습니까? ,

from PyQt5 import QtCore, QtGui, QtWidgets 
import sys 

class Ui_Form(QtWidgets.QWidget): 
    def __init__(self, nb_courbes=1, nom_courbes='', parent=None): 
     super(Ui_Form, self).__init__(parent) 
     self.setupUi(self) 

    def setupUi(self, Form): 
     Form.setObjectName("Form") 
     Form.resize(249, 169) 
     self.tabWidget = QtWidgets.QTabWidget(Form) 
     self.tabWidget.setGeometry(QtCore.QRect(40, 40, 127, 80)) 
     self.tabWidget.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) 
     self.tabWidget.setObjectName("tabWidget") 
     self.tab = QtWidgets.QWidget() 
     self.tab.setObjectName("tab") 
     self.tabWidget.addTab(self.tab, "") 
     self.tab_2 = QtWidgets.QWidget() 
     self.tab_2.setObjectName("tab_2") 
     self.tabWidget.addTab(self.tab_2, "") 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    form = Ui_Form() 
    form.show() 
    sys.exit(app.exec_()) 

내가 파란색 영역에 일반 커서 (화살표)를 원하는 :

여기에 마우스 커서 전체를 통해 탭,뿐만 아니라 탭 타이틀을 변경하는 샘플 코드 빨간색 영역의 비활성 탭 제목에서 마우스 커서를 변경하십시오.

tabtab2

답변

1

당신은 tab-bar에 설정하여 모든 탭에 대한 커서를 변경할 수 있습니다

self.tabWidget.tabBar().setCursor(QtCore.Qt.PointingHandCursor) 

을하지만, 비활성 탭을 변경하려면 다음을 수행해야합니다 다음과 같이 커서를 동적으로 변경하려면 이벤트 필터를 사용하십시오.

def setupUi(self, Form): 
    ... 
    self.tabWidget.tabBar().installEventFilter(self) 
    self.tabWidget.tabBar().setMouseTracking(True) 
    ... 

def eventFilter(self, source, event): 
    if (event.type() == QtCore.QEvent.MouseMove and 
     source is self.tabWidget.tabBar()): 
     index = source.tabAt(event.pos()) 
     if index >= 0 and index != source.currentIndex(): 
      source.setCursor(QtCore.Qt.PointingHandCursor) 
     else: 
      source.setCursor(QtCore.Qt.ArrowCursor) 
    return super(Ui_Form, self).eventFilter(source, event) 

(PS : Qt는 스타일 시트를 통해 커서를 변경하는 것을 지원하지 않습니다.)

+0

문법을 이용해 주셔서 감사합니다. 나는 relecture없이, 미안하게 나의 지위를 썼다. 그리고 해결책을 가져 주셔서 감사합니다! 당신은 PyQt ekhumoro에서 살인자입니다.) –