PyQt5 在QListWidget自定义Item的操作

 更新时间:2021年03月09日 14:31:32   作者:Simon菌  
这篇文章主要介绍了PyQt5 在QListWidget自定义Item的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

效果图

自定义一个Item

新建一个QWidget对象

在QWidget内添加Layout

在Layout内添加要的控件

为QWidget设置Layout

新建一个QListWidgetItem并调整大小

为QListWidgetItem设置QWidget

创建布局

首先我们创建一个最基本的布局, 只有一个listWidget和一个pushButton

实现点击button后在listWidget中添加数据

class Windows(QMainWindow, Ui_MainWindow):
 def __init__(self):
  super(Windows, self).__init__()
  self.setupUi(self)
  self.pushButton.clicked.connect(self.deal)
 def deal(self):
  # 准备实现的功能
  pass
app = QtWidgets.QApplication(sys.argv)
windows = Windows()
windows.show()
sys.exit(app.exec_())

确定布局

可以看出此布局总体是一个横向布局(QHBoxLayout), 再其右边是一个纵向(QVBoxLayout), 下面的布局又是一个横向布局(QHBoxLayout)

def get_item():
 # 总Widget
 wight = QWidget()
 # 布局
 layout_main = QHBoxLayout() # 总体横向布局
 layout_right = QVBoxLayout() # 右边的纵向布局
 layout_right_down = QHBoxLayout() # 右下的横向布局
 layout_right.addLayout(layout_right_down) # 右下布局填充到右边布局中
 layout_main.addLayout(layout_right) # 右边布局填充入总布局
 wight.setLayout(layout_main) # 为Widget设置总布局

添加数据

{
 "ship_name": "胡德",
 "ship_country": "E国",
 "ship_star": "5",
 "ship_index": "1",
 "ship_photo": "1.png",
 "ship_type": "战巡"
}
def get_item_wight(data):
 # 读取属性
 ship_name = data['ship_name']
 ship_photo = data['ship_photo']
 ship_index = data['ship_index']
 ship_type = data['ship_type']
 ship_country = data['ship_country']
 ship_star = data['ship_star']
 # 总Widget
 wight = QWidget()
 # 总体横向布局
 layout_main = QHBoxLayout()
 map_l = QLabel() # 头像显示
 map_l.setFixedSize(40, 25)
 maps = QPixmap(ship_photo).scaled(40, 25)
 map_l.setPixmap(maps)
 # 右边的纵向布局
 layout_right = QVBoxLayout()
 # 右下的的横向布局
 layout_right_down = QHBoxLayout() # 右下的横向布局
 layout_right_down.addWidget(QLabel(ship_type))
 layout_right_down.addWidget(QLabel(ship_country))
 layout_right_down.addWidget(QLabel(str(ship_star) + "星"))
 layout_right_down.addWidget(QLabel(ship_index))
 # 按照从左到右, 从上到下布局添加
 layout_main.addWidget(map_l) # 最左边的头像
 layout_right.addWidget(QLabel(ship_name)) # 右边的纵向布局
 layout_right.addLayout(layout_right_down) # 右下角横向布局
 layout_main.addLayout(layout_right) # 右边的布局
 wight.setLayout(layout_main) # 布局给wight
 return wight # 返回wight

设置QListWidgetItem

for ship_data in YOUR_DATA:
 item = QListWidgetItem() # 创建QListWidgetItem对象
 item.setSizeHint(QSize(200, 50)) # 设置QListWidgetItem大小
 widget = get_item_wight(ship_data) # 调用上面的函数获取对应
 self.listWidget.addItem(item) # 添加item
 self.listWidget.setItemWidget(item, widget) # 为item设置widget

显示效果:

全部代码

import sys
import json
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
 """
 自动生成的代码, 请不要修改
 """
 def setupUi(self, MainWindow):
  MainWindow.setObjectName("MainWindow")
  MainWindow.resize(455, 357)
  self.centralwidget = QtWidgets.QWidget(MainWindow)
  self.centralwidget.setObjectName("centralwidget")
  self.listWidget = QtWidgets.QListWidget(self.centralwidget)
  self.listWidget.setGeometry(QtCore.QRect(10, 10, 341, 341))
  self.listWidget.setObjectName("listWidget")
  self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  self.pushButton.setGeometry(QtCore.QRect(360, 10, 81, 31))
  self.pushButton.setObjectName("pushButton")
  MainWindow.setCentralWidget(self.centralwidget)
  self.retranslateUi(MainWindow)
  QtCore.QMetaObject.connectSlotsByName(MainWindow)
 def retranslateUi(self, MainWindow):
  _translate = QtCore.QCoreApplication.translate
  MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  self.pushButton.setText(_translate("MainWindow", "PushButton"))
class Windows(QMainWindow, Ui_MainWindow):
 def __init__(self):
  super(Windows, self).__init__()
  self.setupUi(self)
  self.pushButton.clicked.connect(self.deal)
 def deal(self):
  all_data = json.loads('[{"ship_name":"\u80e1\u5fb7","ship_country":"E\u56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/1.png","ship_type":"\u6218\u5de1"},{"ship_name":"\u6d4b\u8bd5","ship_country":"E\u56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/2.png","ship_type":"\u6218\u5de1"},{"ship_name":"\u6d4b\u8bd52","ship_country":"E\u56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/3.png","ship_type":"\u6218\u5de1"},{"ship_name":"\u6d4b\u8bd53","ship_country":"E\u56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/4.png","ship_type":"\u6218\u5de1"}]')
  def get_item_wight(data):
   # 读取属性
   ship_name = data['ship_name']
   ship_photo = data['ship_photo']
   ship_index = data['ship_index']
   ship_type = data['ship_type']
   ship_country = data['ship_country']
   ship_star = data['ship_star']
   # 总Widget
   wight = QWidget()
   # 总体横向布局
   layout_main = QHBoxLayout()
   map_l = QLabel() # 头像显示
   map_l.setFixedSize(40, 25)
   maps = QPixmap(ship_photo).scaled(40, 25)
   map_l.setPixmap(maps)
   # 右边的纵向布局
   layout_right = QVBoxLayout()
   # 右下的的横向布局
   layout_right_down = QHBoxLayout() # 右下的横向布局
   layout_right_down.addWidget(QLabel(ship_type))
   layout_right_down.addWidget(QLabel(ship_country))
   layout_right_down.addWidget(QLabel(str(ship_star) + "星"))
   layout_right_down.addWidget(QLabel(ship_index))
   # 按照从左到右, 从上到下布局添加
   layout_main.addWidget(map_l) # 最左边的头像
   layout_right.addWidget(QLabel(ship_name)) # 右边的纵向布局
   layout_right.addLayout(layout_right_down) # 右下角横向布局
   layout_main.addLayout(layout_right) # 右边的布局
   wight.setLayout(layout_main) # 布局给wight
   return wight # 返回wight
  for ship_data in all_data:
   item = QListWidgetItem() # 创建QListWidgetItem对象
   item.setSizeHint(QSize(200, 50)) # 设置QListWidgetItem大小
   widget = get_item_wight(ship_data) # 调用上面的函数获取对应
   self.listWidget.addItem(item) # 添加item
   self.listWidget.setItemWidget(item, widget) # 为item设置widget
app = QtWidgets.QApplication(sys.argv)
windows = Windows()
windows.show()
sys.exit(app.exec_())

补充:pyqt5 QListWiget点击item事件

我就废话不多说了,大家还是直接看代码吧~

from PyQt4.QtCore import QCoreApplication, Qt
from PyQt4.QtGui import QListWidget, QListWidgetItem, QApplication 
import sys 
class MyList(QListWidget):
 def __init__(self):
  QListWidget.__init__(self)
  self.add_items()
  self.itemClicked.connect(self.item_click)
 
 def add_items(self):
  for item_text in ['item1', 'item2', 'item3']:
   item = QListWidgetItem(item_text)
   self.addItem(item)
 
 def item_click(self, item):
  print item, str(item.text())
 
if __name__ == '__main__':
 app = QApplication([])
 myList = MyList()
 myList.show()
 sys.exit(app.exec_())

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • python实现将视频按帧读取到自定义目录

    python实现将视频按帧读取到自定义目录

    今天小编就为大家分享一篇python实现将视频按帧读取到自定义目录,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用Python编写脚本来生成随机密码

    使用Python编写脚本来生成随机密码

    在数字化时代,密码已成为我们保护个人信息和数据安全的重要手段,然而,手动创建复杂且难以猜测的密码是一项既繁琐又容易出错的任务,本文将详细介绍如何使用Python编写脚本来生成随机密码,并探讨其背后的原理和技术细节,需要的朋友可以参考下
    2024-10-10
  • python实现的登录和操作开心网脚本分享

    python实现的登录和操作开心网脚本分享

    这篇文章主要介绍了python实现的登录和操作开心网脚本分享,可以登录开心网,登录后发送信息等功能,需要的朋友可以参考下
    2014-07-07
  • scrapy-redis源码分析之发送POST请求详解

    scrapy-redis源码分析之发送POST请求详解

    这篇文章主要给大家介绍了关于scrapy-redis源码分析之发送POST请求的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用scrapy-redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Python实现的彩票机选器实例

    Python实现的彩票机选器实例

    这篇文章主要介绍了Python实现彩票机选器的方法,可以模拟彩票号码的随机生成功能,需要的朋友可以参考下
    2015-06-06
  • Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

    Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

    这篇文章主要介绍了Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • python之cur.fetchall与cur.fetchone提取数据并统计处理操作

    python之cur.fetchall与cur.fetchone提取数据并统计处理操作

    这篇文章主要介绍了python之cur.fetchall与cur.fetchone提取数据并统计处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Django模型层实现多表关系创建和多表操作

    Django模型层实现多表关系创建和多表操作

    使用django ORM可以创建多表关系,并且也支持多张表之间的操作,以创建表关系和查询两部分说明django ORM的多表操作,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-07-07
  • 在cmd中查看python的安装路径方法

    在cmd中查看python的安装路径方法

    在本篇文章里小编给大家整理的是关于怎样在cmd中查看python的安装路径的相关内容,有兴趣的朋友们学习参考下。
    2019-07-07
  • Python实现线程池工作模式的案例详解

    Python实现线程池工作模式的案例详解

    这篇文章给大家介绍Python实现线程池工作模式的相关知识,本文基于Socket通信方法,自定义数据交换协议,围绕苹果树病虫害识别需求,迭代构建了客户机/服务器模式的智能桌面App,感兴趣的朋友跟随小编一起看看吧
    2022-06-06

最新评论