2017-10-30 9 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の殺人者です;) –

関連する問題