python - 如何在 QTabWidget 选项卡上设置鼠标光标

标签 python pyqt qtabwidget mouse-cursor

我正在处理一个我无法成功解决的简单问题。我正在使用 Python-3.6 和 PyQt5。

我希望的是当用户将鼠标放在非事件选项卡上方时更改鼠标光标(了解他可以单击它来更改事件选项卡) 。并且这仅在非事件选项卡上,而不是在其内容上(因为更改 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_())

我希望普通光标(箭头)位于蓝色区域,但将鼠标光标更改为红色区域中的非事件选项卡标题。

tab tab2

最佳答案

您可以通过将光标设置在 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不支持通过样式表更改光标)。

关于python - 如何在 QTabWidget 选项卡上设置鼠标光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47015858/

相关文章:

python - 按另一个列表或字典对字典进行排序

python - 如何在 Python 2 上使用 psutil.Popen 和 unicode 命令

python - 如何将一行编辑的焦点更改为另一行编辑

python - PyQT QTabWidget currentChanged

python - 建议一种在单击按钮时填充数据库的方法

python - 来自文件的数据流与文件目录的性能

python - 在Linux上安装PyQt5 5.14.1

python - 在 Python3 中将小部件应用程序作为线程启动?

c++ - 如何只设置QTabWidget背景色样式表

c++ - QSS QTabBar 文本对齐不起作用