PyQt5可滚动标签–将工具提示设置到标签部分

  • Post category:Python

下面是PyQt5可滚动标签–将工具提示设置到标签部分的完整使用攻略:

1. 确定要使用的类和模块

要使用可滚动标签和工具提示的功能,需要导入以下模块和类:

from PyQt5.QtWidgets import QApplication, QTabWidget, QWidget, QVBoxLayout, QLabel
from PyQt5.QtGui import QMouseEvent, QCursor, QToolTip
from PyQt5.QtCore import Qt

2. 创建可滚动标签和工具提示

首先,创建一个QTabWidget对象作为主窗口的中心部分,并创建多个QWidget对象作为标签页。然后,在每个QWidget对象中添加多个QLabel对象作为标签页内容,将QLabel对象的工具提示设置为标签名。

class MyTabWidget(QTabWidget):
    def __init__(self):
        super().__init__()
        self.setTabsClosable(True)
        self.tabCloseRequested[int].connect(self.remove_tab)
        self.addTab(Tab1(), "Tab 1")
        self.addTab(Tab2(), "Tab 2")


class Tab1(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        label1 = QLabel("Label 1")
        label1.setToolTip("Tab 1")
        layout.addWidget(label1)
        label2 = QLabel("Label 2")
        label2.setToolTip("Tab 1")
        layout.addWidget(label2)


class Tab2(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        label1 = QLabel("Label 1")
        label1.setToolTip("Tab 2")
        layout.addWidget(label1)
        label2 = QLabel("Label 2")
        label2.setToolTip("Tab 2")
        layout.addWidget(label2)

3. 用鼠标滚轮滚动标签

要实现鼠标滚轮滚动标签的功能,需要重写QTabWidget类的wheelEvent()方法,并在该方法中调用上方的scroll()方法,使标签页随着鼠标滚轮的滚动而滚动。

class MyTabWidget(QTabWidget):
    def __init__(self):
        # ...省略其他初始化代码...

    def wheelEvent(self, event):
        delta = event.angleDelta().y()
        self.scroll(-delta // 120, 0)

4. 显示标签页的工具提示

最后,要实现显示标签页工具提示的功能,需要在QLabel的鼠标移动事件(mouseMoveEvent)中使用QToolTip来显示标签名作为工具提示。

class Tab1(QWidget):
    def __init__(self):
        # ...省略其他初始化代码...

    def mouseMoveEvent(self, event):
        label = self.childAt(event.pos())
        if label is None:
            return
        QToolTip.showText(QCursor.pos(), label.toolTip())


class Tab2(QWidget):
    def __init__(self):
        # ...省略其他初始化代码...

    def mouseMoveEvent(self, event):
        label = self.childAt(event.pos())
        if label is None:
            return
        QToolTip.showText(QCursor.pos(), label.toolTip())

5. 示例说明

下面给出两个示例,第一个示例是创建一个滚动标签,每个标签页只有一个文本框,并在文本框上设置了工具提示:

class MyTabWidget(QTabWidget):
    def __init__(self):
        super().__init__()
        self.setTabsClosable(True)
        self.tabCloseRequested[int].connect(self.remove_tab)
        for i in range(10):
            tab = QWidget()
            layout = QVBoxLayout(tab)
            label = QLabel("Label {}".format(i))
            label.setToolTip("Tab {}".format(i))
            layout.addWidget(label)
            self.addTab(tab, "Tab {}".format(i))

第二个示例是创建一个滚动标签,每个标签页中有多个控件,并在每个控件上设置了工具提示:

class MyTabWidget(QTabWidget):
    def __init__(self):
        super().__init__()
        self.setTabsClosable(True)
        self.tabCloseRequested[int].connect(self.remove_tab)
        self.addTab(Tab1(), "Tab 1")
        self.addTab(Tab2(), "Tab 2")


class Tab1(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        label1 = QLabel("Label 1")
        label1.setToolTip("Tab 1")
        layout.addWidget(label1)
        label2 = QLabel("Label 2")
        label2.setToolTip("Tab 1")
        layout.addWidget(label2)


class Tab2(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        label1 = QLabel("Label 1")
        label1.setToolTip("Tab 2")
        layout.addWidget(label1)
        label2 = QLabel("Label 2")
        label2.setToolTip("Tab 2")
        layout.addWidget(label2)
        button = QPushButton("Button")
        button.setToolTip("Tab 2")
        layout.addWidget(button)