zoukankan      html  css  js  c++  java
  • PyQt PySide QListWidget 添加自定义 widget

    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

     1 # -*- coding: utf-8 -*-
     2 
     3 import sys
     4 from PySide import QtGui
     5 #from PyQt4 import QtGui
     6 
     7 class QCustomQWidget (QtGui.QWidget):
     8     def __init__ (self, parent = None):
     9         super(QCustomQWidget, self).__init__(parent)
    10         self.textQVBoxLayout = QtGui.QVBoxLayout()
    11         self.textUpQLabel    = QtGui.QLabel()
    12         self.textDownQLabel  = QtGui.QLabel()
    13         self.textQVBoxLayout.addWidget(self.textUpQLabel)
    14         self.textQVBoxLayout.addWidget(self.textDownQLabel)
    15         self.allQHBoxLayout  = QtGui.QHBoxLayout()
    16         self.iconQLabel      = QtGui.QPushButton()
    17         self.allQHBoxLayout.addWidget(self.iconQLabel, 0)
    18         self.allQHBoxLayout.addLayout(self.textQVBoxLayout, 1)
    19         self.setLayout(self.allQHBoxLayout)
    20         # setStyleSheet
    21         self.textUpQLabel.setStyleSheet('''
    22             color: rgb(0, 0, 255);
    23         ''')
    24         self.textDownQLabel.setStyleSheet('''
    25             color: rgb(255, 0, 0);
    26         ''')
    27 
    28     def setTextUp (self, text):
    29         self.textUpQLabel.setText(text)
    30 
    31     def setTextDown (self, text):
    32         self.textDownQLabel.setText(text)
    33 
    34     def setIcon (self, imagePath):
    35         pass
    36         #self.iconQLabel.setPixmap(QtGui.QPixmap(imagePath))
    37 
    38 class exampleQMainWindow (QtGui.QMainWindow):
    39     def __init__ (self):
    40         super(exampleQMainWindow, self).__init__()
    41         # Create QListWidget
    42         self.myQListWidget = QtGui.QListWidget(self)
    43         for index, name, icon in [
    44             ('No.1', 'Meyoko',  'icon.png'),
    45             ('No.2', 'Nyaruko', 'icon.png'),
    46             ('No.3', 'Louise',  'icon.png')]:
    47             # Create QCustomQWidget
    48             myQCustomQWidget = QCustomQWidget()
    49             myQCustomQWidget.setTextUp(index)
    50             myQCustomQWidget.setTextDown(name)
    51             myQCustomQWidget.setIcon(icon)
    52             # Create QListWidgetItem
    53             myQListWidgetItem = QtGui.QListWidgetItem(self.myQListWidget)
    54             # Set size hint
    55             myQListWidgetItem.setSizeHint(myQCustomQWidget.sizeHint())
    56             # Add QListWidgetItem into QListWidget
    57             self.myQListWidget.addItem(myQListWidgetItem)
    58             self.myQListWidget.setItemWidget(myQListWidgetItem, myQCustomQWidget)
    59         self.setCentralWidget(self.myQListWidget)
    60 
    61 app = QtGui.QApplication([])
    62 window = exampleQMainWindow()
    63 window.show()
    64 sys.exit(app.exec_())
    View Code

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

    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)

    运行结果:

     

  • 相关阅读:
    关系型数据库范式 沧海
    面试注意事项 沧海
    怎样在面试后得到想要的职位 沧海
    应届大学毕业生面试应答 沧海
    二叉树的遍历及实现 沧海
    比较好的C++面试题 沧海
    多态 沧海
    应届大学毕业生面试应答 沧海
    SQL Server开发人员应聘常被问的问题 沧海
    面试成功的技巧与忠告 沧海
  • 原文地址:https://www.cnblogs.com/ibingshan/p/9809974.html
Copyright © 2011-2022 走看看