c/c++语言开发共享PyQt5 在QListWidget自定义Item的操作

效果图自定义一个item新建一个qwidget对象在qwidget内添加layout在layout内添加要的控件为qwidget设置layout新建一个qlistwidgetitem并调整大小为qli


效果图

PyQt5 在QListWidget自定义Item的操作

自定义一个item

新建一个qwidget对象

在qwidget内添加layout

在layout内添加要的控件

为qwidget设置layout

新建一个qlistwidgetitem并调整大小

为qlistwidgetitem设置qwidget

创建布局

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

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

PyQt5 在QListWidget自定义Item的操作

  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_())  

确定布局

PyQt5 在QListWidget自定义Item的操作

可以看出此布局总体是一个横向布局(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

显示效果:

PyQt5 在QListWidget自定义Item的操作

全部代码

  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":"u80e1u5fb7","ship_country":"eu56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/1.png","ship_type":"u6218u5de1"},{"ship_name":"u6d4bu8bd5","ship_country":"eu56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/2.png","ship_type":"u6218u5de1"},{"ship_name":"u6d4bu8bd52","ship_country":"eu56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/3.png","ship_type":"u6218u5de1"},{"ship_name":"u6d4bu8bd53","ship_country":"eu56fd","ship_star":"5","ship_index":"1","ship_photo":"icon/4.png","ship_type":"u6218u5de1"}]')    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_())

以上为个人经验,希望能给大家一个参考,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。如有错误或未考虑完全的地方,望不吝赐教。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/595964.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐