web-dev-qa-db-ja.com

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)

問題は、何も表示されないことです。キーボードを使用してナビゲートできる空白行が表示されますが、空白です。ウィジェットにjustプッシュボタンが含まれている場合、ウィジェットは機能するため、プッシュボタンだけで問題が発生しているわけではありません。 setItemWidgetが処理できるウィジェットの複雑さに制限はありますか?以下の関連する投稿のいくつかで提案されているように、おそらく私はコンビニエンスクラスを超える必要がありますか?

関連記事

pyqtがウィジェットをQListWidgetに追加する
前の投稿のタイトルは私のものと似ていますが、QtDesignerの複雑なコードの娯楽(いくつかのカスタムのものと混合)については、あまり表現されていない質問のようです。これが実際にその人が尋ねるべきだった質問であるかどうかはまったく明らかではありません。タイトルは重複しているように見えますが、質問(私は祈っています)はそうではありません。

this postについても似たようなことを言うでしょう。

ラジオボタン付きのQListWidgetItem

カスタムアイテムとカスタムアイテムウィジェットを含むQListView/QListWidget

QTのQListWidgetにカスタムウィジェットを追加する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

13
eric

これを試して:

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が必要です。

21
Chernobyl

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)

1
ALFAFA