PyQt5 QListWidget::item:hover 悬停时修改颜色

在PyQt5中,我们可以使用QListWidget::item:hover信号来检测鼠标悬停在列表项上的情况,当鼠标悬停在列表项上时,我们可以修改该项的颜色以提供视觉反馈,以下是一个简单的示例,展示了如何在鼠标悬停时修改列表项的颜色。

PyQt5 QListWidget::item:hover 悬停时修改颜色
(图片来源网络,侵删)

我们需要创建一个QApplication和一个QListWidget,我们可以通过addItem方法向列表中添加项,接下来,我们将创建一个槽函数,该函数将在鼠标悬停在列表项上时被调用,在这个槽函数中,我们将获取当前项的样式表,并修改其颜色,我们将QListWidget::item:hover信号连接到我们的槽函数。

以下是完整的代码:

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
class HoverListWidget(QListWidget):
    def __init__(self, parent=None):
        super(HoverListWidget, self).__init__(parent)
        self.setAcceptDrops(True)
        self.setDragEnabled(True)
        self.setDefaultDropAction(Qt.MoveAction)
        self.setMouseTracking(True)
        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        for i in range(10):
            item = QListWidgetItem(f"Item {i}")
            item.setData(Qt.UserRole, f"Item {i} Data")
            self.addItem(item)
        self.itemDoubleClicked.connect(self.on_item_double_clicked)
        self.item:hover.connect(self.on_item_hover)
    def on_item_double_clicked(self, item):
        print(f"Doubleclicked on item {item.text()} with data {item.data(Qt.UserRole)}")
    def on_item_hover(self, item):
        # 修改悬停时的颜色为红色
        item.setBackgroundColor(Qt.red)
        # 延迟一段时间恢复原色,以避免快速移动鼠标时颜色闪烁
        QTimer.singleShot(100, item.setBackgroundColor)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QWidget()
    window.setWindowTitle("Hover List Widget Example")
    window.setGeometry(100, 100, 300, 200)
    list_widget = HoverListWidget()
    window.setLayout(list_widget)
    window.show()
    sys.exit(app.exec_())

在这个示例中,我们创建了一个名为HoverListWidget的自定义类,该类继承自QListWidget,我们在其中定义了两个槽函数:on_item_double_clickedon_item_hover,当用户双击列表项或鼠标悬停在列表项上时,这些槽函数将被调用,在on_item_hover槽函数中,我们修改了当前项的背景颜色为红色,为了解决快速移动鼠标时颜色闪烁的问题,我们使用QTimer.singleShot方法延迟一段时间恢复原色。

运行这个示例,你将看到一个包含10个列表项的窗口,当你将鼠标悬停在列表项上时,该项的背景颜色将变为红色,当你松开鼠标按钮时,颜色将恢复为默认值,当你双击列表项时,控制台将输出该项的文本和数据。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/478210.html

(0)
未希新媒体运营
上一篇 2024-04-15 10:54
下一篇 2024-04-15 10:56

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入