将QWidget添加到QListWidget

eri*_*ric 12 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)
Run Code Online (Sandbox Code Playgroud)

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

相关文章

pyqt将一个小部件添加到QListWidget
请注意,上一篇文章的标题与我的相似,但似乎是一个相对较差的问题,关于QtDesigner的一个复杂的代码模板(混合了一些自定义的东西).目前尚不清楚这实际上是这个人应该问的问题.虽然标题看起来像是重复,但问题(我祈祷)却不是.

我会对这篇文章说些类似的话.

带有单选按钮的QListWidgetItem

带有自定义项和自定义项窗口小部件的QListView/QListWidget

在QT中的QT点击问题中将自定义窗口小部件添加到QListWidget?

pyqt将一个小部件添加到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

Che*_*byl 18

试试这个:

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)
Run Code Online (Sandbox Code Playgroud)

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

  • @neuronet`QLayout :: SetFixedSize`主窗口小部件的大小设置为`sizeHint();`它根本无法调整大小.如果你不设置尺寸提示,带有标签和按钮的小部件将比项目大,所以它将非常丑陋和不正确. (2认同)

ALF*_*AFA 6

如果你使用 PyQt5,有一些变化,你必须使用QtWidgetsfor widget 而不是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)
Run Code Online (Sandbox Code Playgroud)