我正在尝试制作一个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
答案 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)