各アイテムがテキストとプッシュボタンを含む単純なウィジェットである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についても似たようなことを言うでしょう。
カスタムアイテムとカスタムアイテムウィジェットを含むQListView/QListWidget
QTのQListWidgetにカスタムウィジェットを追加するQTのクリックの問題?
http://www.qtcentre.org/threads/8660-Drawing-a-widget-in-QItemDelegate-s-Paint-method
これを試して:
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
が必要です。
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)