将QWidget添加到QListWidget

时间:2014-10-05 03:31:55

标签: qt qt4 pyqt pyqt4 pyside

我正在尝试制作一个QListWidget,其中每个项目都是一个包含文本和按钮的简单小部件。我使用以下内容:

itemN = QtGui.QListWidgetItem() 
#Create widget
widget = QtGui.QWidget()
widgetText =  QtGui.QLabel("I love PyQt!")
widgetButton =  QtGui.QPushButton("Push Me")
widgetLayout = QtGui.QHBoxLayout()
widgetLayout.addWidget(widgetText)
widgetLayout.addWidget(widgetButton)
widgetLayout.addStretch()
widget.setLayout(widgetLayout)
#Add widget to QListWidget funList
funList.addItem(itemN)
funList.setItemWidget(itemN, widget)

问题是,什么都没有出现。我得到一个空白行,我可以使用键盘导航,但它是空白的。当小部件包含只是一个按钮时,它可以工作,所以它不像单独的按钮就搞乱了。 setItemWidget可以处理的小部件的复杂性是否有限制?也许我需要超越便利班,正如下面一些相关帖子所建议的那样?

相关帖子

pyqt adding a widget to a QListWidget
请注意,之前的帖子与我的标题类似,但似乎是一个相对较差的问题,关于QtDesigner复杂的代码模板(混合了一些自定义的东西)。目前尚不清楚这实际上是这个人应该问的问题。虽然标题看起来像是重复,但问题(我祈祷)不是。

我会说this帖子类似的东西。

QListWidgetItem with Radio Button

QListView/QListWidget with custom items and custom item widgets

Adding Custom Widget to QListWidget in QT click issue in QT?

pyqt adding a widget to a QListWidget

http://www.qtcentre.org/threads/8660-Drawing-a-widget-in-QItemDelegate-s-paint-method

http://developer.nokia.com/community/discussion/showthread.php/211634-Adding-a-button-inside-QListWidgetItem

2 个答案:

答案 0 :(得分:16)

试试这个:

itemN = QtGui.QListWidgetItem() 
#Create widget
widget = QtGui.QWidget()
widgetText =  QtGui.QLabel("I love PyQt!")
widgetButton =  QtGui.QPushButton("Push Me")
widgetLayout = QtGui.QHBoxLayout()
widgetLayout.addWidget(widgetText)
widgetLayout.addWidget(widgetButton)
widgetLayout.addStretch()

widgetLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
widget.setLayout(widgetLayout)  
itemN.setSizeHint(widget.sizeHint())    

#Add widget to QListWidget funList
funList.addItem(itemN)
funList.setItemWidget(itemN, widget)

如您所见,您需要setSizeConstraint布局和setSizeHint到项目。

答案 1 :(得分:1)

如果您使用PyQt5,则需要进行一些更改,您必须为小部件使用QtWidgets,而不是QtGui。如果与PyQt5一起使用,请使用以下代码:

别忘了导入PyQt5:

from PyQt5 import QtCore, QtGui, QtWidgets`

itemN = QtWidgets.QListWidgetItem()
# Create widget
widget = QtWidgets.QWidget()
widgetText = QtWidgets.QLabel("I love PyQt!")
widgetButton = QtWidgets.QPushButton("Push Me")
widgetLayout = QtWidgets.QHBoxLayout()
widgetLayout.addWidget(widgetText)
widgetLayout.addWidget(widgetButton)
widgetLayout.addStretch()

widgetLayout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
widget.setLayout(widgetLayout)
itemN.setSizeHint(widget.sizeHint())

# Add widget to QListWidget funList
funList.addItem(itemN)
funList.setItemWidget(itemN, widget)