您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:PyQt5 在QListWidget自定义Item的操作

51自学网 2021-10-30 22:51:53
  python
这篇教程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):  # 准备实现的功能  passapp = 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 sysimport jsonfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *from PyQt5 import QtCore, QtGui, QtWidgetsclass 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设置widgetapp = QtWidgets.QApplication(sys.argv)windows = Windows()windows.show()sys.exit(app.exec_())

补充:pyqt5 QListWiget点击item事件

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

from PyQt4.QtCore import QCoreApplication, Qtfrom 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_())

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


PYQT5 实现给listwidget的滚动条添加滚动信号
pytest conftest.py文件的使用讲解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。