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

成都创新互联公司成立于2013年,先为华亭等服务建站,华亭等地企业,进行企业商务咨询服务。为华亭企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
我们需要创建一个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_clicked和on_item_hover,当用户双击列表项或鼠标悬停在列表项上时,这些槽函数将被调用,在on_item_hover槽函数中,我们修改了当前项的背景颜色为红色,为了解决快速移动鼠标时颜色闪烁的问题,我们使用QTimer.singleShot方法延迟一段时间恢复原色。
运行这个示例,你将看到一个包含10个列表项的窗口,当你将鼠标悬停在列表项上时,该项的背景颜色将变为红色,当你松开鼠标按钮时,颜色将恢复为默认值,当你双击列表项时,控制台将输出该项的文本和数据。