Python PyQt QListWidget自定义项
如何创建一个QListWidgetItem,它下面有一个图像和两个标签/字符串,并且支持css 这是我最后一次尝试:Python PyQt QListWidget自定义项,python,pyqt,qlistwidgetitem,Python,Pyqt,Qlistwidgetitem,如何创建一个QListWidgetItem,它下面有一个图像和两个标签/字符串,并且支持css 这是我最后一次尝试: class CustomListWidgetItem(QListWidgetItem, QLabel): def __init__(self, parent=None): QListWidgetItem.__init__(self, parent) QLabel.__init__(self, parent) 顺便说一句,我正在使用PyQt
class CustomListWidgetItem(QListWidgetItem, QLabel):
def __init__(self, parent=None):
QListWidgetItem.__init__(self, parent)
QLabel.__init__(self, parent)
顺便说一句,我正在使用PyQt
如何创建具有1个映像和2个映像的QListWidgetItem
下面是支持css的标签/字符串
在这种情况下,您不能这样做(它实际上有一个用于轻松添加图标的API,但不可能有两个标签/字符串)。但是,您可以创建自己的自定义小部件并将其放入QtGui.QListWidget
中
QtGui.QListWidget
QListWidget.setItemWidget(self,QListWidgetItem,QWidget小部件)
方法创建自定义小部件对象并在QListWidgetItem
中设置项import sys
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.QLabel()
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):
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_())
注意:我有图像文件icon.png
,大小为48 x 48像素
实验结果
你能解释一下为什么不起作用吗?您是否收到错误消息或只是没有看到预期的行为?因为在下一行中,我尝试执行self.setText(“test”),但它没有显示“test”,谢谢!这正是我要找的!这个例子太棒了!(与Nyaruko WW)谢谢!碰撞我这里有一个问题@Kitsune您将如何访问myQCustomQWidget中的项目?如果我从主QList中选择[0]行,我将如何访问myQCustomQWidget中的文本变量,例如TextDown?@Arukaito,您只需在类QCustomQWidget
def getTextUp(self)中添加一个方法:返回self.textUpQLabel.text()
,并按如下方式访问范围内的行(self.myQListWidget.count()):item=self.myQListWidget.itemWidget(self.list.item(row))text=item.getTextUp()