Добавить QWidget в QListWidget
Я пытаюсь сделать 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 добавление виджета в QListWidget
Обратите внимание, что предыдущий пост имеет похожий заголовок на мой, но, похоже, это относительно слабо выраженный вопрос о сложном коде кода из QtDesigner (смешанного с некоторыми пользовательскими вещами). Совершенно не ясно, что на самом деле это вопрос, который должен был задать человек. Хотя название делает его дубликатом, вопрос (я молюсь) - нет.
Я бы сказал что-то похожее об этом посте.
QListWidgetItem с переключателем
QListView/QListWidget с пользовательскими элементами и виджетами пользовательских элементов
Добавление пользовательского виджета в QListWidget в вопросе щелчка QT в QT?
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
Ответы
Ответ 1
Попробуйте следующее:
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
к элементу.
Ответ 2
Если вы используете 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)
![]()