PyQt PySide QListWidget 添加自定义 widget

原文链接:https://stackoverflow.com/questions/25187444/pyqt-qlistwidget-custom-items

参考链接:https://www.cnblogs.com/weizhixiang/p/5913775.html

前言:

  QListWidget 的 addItem('item') 只是快速的往 list 里面添加文本 item,有时候我们会希望添加自定义的 widget,那么就会用到 addItem ( QListWidgetItem * item ),也就是说 addItem 参数只接受 QString 和 QListWidgetItem,如果要添加自定义的 widget,那么就要把 QListWidgetItem 和 QWidget关联起来,方式是使用 QListWidget 的 setItemWidget(QListWidgetItem, QWidget),不过还要注意一些其它的设置(item 的 size)。

我根据原文链接稍微修改的代码(把图片改为按钮):

该代码可以直接运行,注意自己使用的是 PyQt4 还是 PySide

 # -*- coding: utf-8 -*-

 import sys
from PySide import QtGui
#from PyQt4 import QtGui class QCustomQWidget (QtGui.QWidget):
def __init__ (self, parent = None):
super(QCustomQWidget, self).__init__(parent)
self.textQVBoxLayout = QtGui.QVBoxLayout()
self.textUpQLabel = QtGui.QLabel()
self.textDownQLabel = QtGui.QLabel()
self.textQVBoxLayout.addWidget(self.textUpQLabel)
self.textQVBoxLayout.addWidget(self.textDownQLabel)
self.allQHBoxLayout = QtGui.QHBoxLayout()
self.iconQLabel = QtGui.QPushButton()
self.allQHBoxLayout.addWidget(self.iconQLabel, 0)
self.allQHBoxLayout.addLayout(self.textQVBoxLayout, 1)
self.setLayout(self.allQHBoxLayout)
# setStyleSheet
self.textUpQLabel.setStyleSheet('''
color: rgb(0, 0, 255);
''')
self.textDownQLabel.setStyleSheet('''
color: rgb(255, 0, 0);
''') def setTextUp (self, text):
self.textUpQLabel.setText(text) def setTextDown (self, text):
self.textDownQLabel.setText(text) def setIcon (self, imagePath):
pass
#self.iconQLabel.setPixmap(QtGui.QPixmap(imagePath)) class exampleQMainWindow (QtGui.QMainWindow):
def __init__ (self):
super(exampleQMainWindow, self).__init__()
# Create QListWidget
self.myQListWidget = QtGui.QListWidget(self)
for index, name, icon in [
('No.1', 'Meyoko', 'icon.png'),
('No.2', 'Nyaruko', 'icon.png'),
('No.3', 'Louise', 'icon.png')]:
# Create QCustomQWidget
myQCustomQWidget = QCustomQWidget()
myQCustomQWidget.setTextUp(index)
myQCustomQWidget.setTextDown(name)
myQCustomQWidget.setIcon(icon)
# Create QListWidgetItem
myQListWidgetItem = QtGui.QListWidgetItem(self.myQListWidget)
# Set size hint
myQListWidgetItem.setSizeHint(myQCustomQWidget.sizeHint())
# Add QListWidgetItem into QListWidget
self.myQListWidget.addItem(myQListWidgetItem)
self.myQListWidget.setItemWidget(myQListWidgetItem, myQCustomQWidget)
self.setCentralWidget(self.myQListWidget) app = QtGui.QApplication([])
window = exampleQMainWindow()
window.show()
sys.exit(app.exec_())

从代码总结的思路和注意点是:

1. 创建 QListWidget

2. 创建 QListWidgetItem,父类为 QListWidget,可以理解为一个空的 item

3. 把 QListWidgetItem 添加到 QListWidget中:QListWidget.addItem(QListWidgetItem)

4. 创建 自定义的 QWidget

5. 把 QListWidgetItem 的 sizeHint 设置为 QWidget 的 sizeHint(如果不设置,看不到 QWidget)

6. 关联 QListWidgetItem 和 QWidget:QListWidget.setItemWidget(QListWidgetItem, QWidget)

运行结果:

PyQt PySide QListWidget 添加自定义 widget的更多相关文章

  1. pyqt pyside QLineEdit 重写键盘事件

    pyqt pyside QLineEdit 重写键盘事件 def keyPressEvent(self, event): if (event.modifiers() & QtCore.Qt.S ...

  2. pyqt pyside 设置窗口关闭时删除自身

    pyqt pyside 设置窗口关闭时删除自身 self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

  3. pyqt pyside 窗口自动调整大小

    pyqt pyside 窗口自动调整大小 在QTimer中一直调整 def initTimer(self): self.resizeTimer = QtCore.QTimer(self) self.r ...

  4. pyqt pyside QLabel 显示图片

    pyqt pyside QLabel 显示图片 pixmap = QtGui.QPixmap("D:/myPicture.jpg") label.setPixmap(pixmap) ...

  5. pyqt pyside QPushButton 图标(icon)大小自适应设置

    pyqt pyside QPushButton 图标(icon)大小自适应设置 img = QtGui.QImage(r'd:/test.png') pixmap = QtGui.QPixmap(im ...

  6. pyqt pyside QAction 代码中触发

    pyqt pyside QAction 代码中触发 一般如果多个QAction(在同一个 QButtonGroup 中,而且是 checkable 的),不同情况下我们希望其中某个默认checked: ...

  7. pyqt pyside qcombobox disable wheel scrolling

    pyqt pyside qcombobox disable wheel scrolling import sys from PyQt5 import QtCore, QtWidgets import ...

  8. 第15.46节、PyQt显示部件:OpenGL Widget部件功能简介及使用案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 OpenGL Widget部件是一个Op ...

  9. Pyqt在QListWidget中添加右键菜单

    Pyqt 的资料奇少, 攻破难点之后, 就在这里记一下笔记. QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的, 从文档上可以找到 QWidget 上 ...

随机推荐

  1. C# 如何获取自定义的config中节点的值,并修改节点的值

    现定义一个方法 DIYConfigHelper.cs using System; using System.Xml; using System.Configuration; using System. ...

  2. PHP项目笔记

    1.controller输出前端传来的值:var_dump($_POST['oid']); 2.var_dump($_POST['oid']);die:

  3. PHP7运行环境搭建(Windows7)

    注:本文来源于<    PHP7运行环境搭建(Windows7)   > php7号称能直追facebook的HHVM,为了体验一把传说中的高性能,我特意在本地电脑上尝试着安装了php7, ...

  4. LeetCode(68):文本左右对齐

    Hard! 题目描述: 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用“贪心算法”来放置给定的单词:也就是 ...

  5. cf949C 建模,SCC缩点

    /* 给定n个数据中心,m份资料,每份资料在其中的两个中心备份,一天可供下载的时间是h小时 中心i在第hi小时需要维护,无法下载 现在要将一些中心的维护时间往后推1小时,使得任意时刻每份资料都可以被下 ...

  6. MySQL慢查询 - 开启慢查询

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...

  7. spring cloud 使用spring cloud bus自动刷新配置

    Spring Cloud Bus提供了批量刷新配置的机制,它使用轻量级的消息代理(例如RabbitMQ.Kafka等)连接分布式系统的节点,这样就可以通过Spring Cloud Bus广播配置的变化 ...

  8. idea首次创建新模块的详细操作

    依赖网址:https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.1.0 https://mvnrepository. ...

  9. C. cltt的幸运数LCAtarjan

    /*C: cltt的幸运数 Time Limit: 1 s      Memory Limit: 128 MB Submit Problem Description 一棵树有n个节点,共m次查询,查询 ...

  10. 指定的参数已超出有效值的范围。参数名:sit ,先仔细看看错误和我的一样不一样

    控制面板>程序>