在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个列表项的窗口,当你将鼠标悬停在列表项上时,该项的背景颜色将变为红色,当你松开鼠标按钮时,颜色将恢复为默认值,当你双击列表项时,控制台将输出该项的文本和数据。
分享标题:PyQt5QListWidget::item:hover悬停时修改颜色
分享URL:http://www.mswzjz.com/qtweb/news32/175882.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联