2017-11-23 18 views
0

私はカスタムウィジェットであるアイテムのリストを設計しようとしています(イメージと各アイテムに3つのテキストを表示する必要はありません)。 PyQtでは、関数addItemを使用して、リストに項目を追加することができます。これは、引数として、QListWidgetItemとなります。ListWidget - PyQt5で膨らんだカスタムウィジェット

私はカスタム定義ウィジェットをQListWidetItemにキャストしようとしましたが、成功しませんでした。私は、次のコードの塊を試してみました:

listWidget = QtWidgets.QListWidget(self.centralwidget) 
item = QListWidgetItem(self.listWidget) 
custom_item = CustomWidget() 
listWidget.addItem(item) 
listWidget.setItemWidget(item, item_widget) 

リストは空のリストを表示し、私は上記のコードでcustom_itemを膨張させることはありませんおりますので、これが期待されています。これをPyQTで修正するには?

私はわかりませんが、カスタムウィジェットは、関連するかもしれない:私はあなたのコードから気づく何

class CustomWidget(QWidget): 
    def __init__(self, user): 
     QWidget.__init__(self) 
     self.user = user 
     self.horizontalLayoutWidget = QtWidgets.QWidget() 
     self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 211, 41)) 
     self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") 
     self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) 
     self.horizontalLayout.setContentsMargins(0, 0, 0, 0) 
     self.horizontalLayout.setObjectName("horizontalLayout") 
     self.UserImage = QtWidgets.QLabel(self.horizontalLayoutWidget) 
     self.UserImage.setText("This is an Image") 
     self.UserImage.setObjectName("UserImage") 
     self.horizontalLayout.addWidget(self.UserImage) 
     self.verticalLayout = QtWidgets.QVBoxLayout() 
     self.verticalLayout.setObjectName("verticalLayout") 
     self.UserName = QtWidgets.QLabel(self.horizontalLayoutWidget) 
     self.UserName.setText("My name is jeff") 
     self.UserName.setObjectName("UserName") 
     self.verticalLayout.addWidget(self.UserName) 
     self.UserStatus = QtWidgets.QLabel(self.horizontalLayoutWidget) 
     self.UserStatus.setText("I am available") 
     self.UserStatus.setObjectName("UserStatus") 
     self.verticalLayout.addWidget(self.UserStatus) 
     self.horizontalLayout.addLayout(self.verticalLayout) 
     self.horizontalLayout.setStretch(0, 1) 
     self.horizontalLayout.setStretch(1, 3) 

答えて

1

は、ウィジェットが正しく構築されていないことであるself.horizontalLayoutはメインウィジェットですが、それはそう親はありませんあなたはそのウィジェットを避けることができます。一方、あなたはsetSizeHint()でアイテムのサイズを設定する必要があります。

from PyQt5 import QtWidgets, QtCore 

class CustomWidget(QtWidgets.QWidget): 
    def __init__(self, user, *args, **kwargs): 
     QtWidgets.QWidget.__init__(self, *args, **kwargs) 
     self.user = user 
     self.setGeometry(QtCore.QRect(0, 0, 211, 41)) 
     self.horizontalLayout = QtWidgets.QHBoxLayout(self) 
     self.horizontalLayout.setContentsMargins(0, 0, 0, 0) 
     self.horizontalLayout.setObjectName("horizontalLayout") 
     self.UserImage = QtWidgets.QLabel(self) 
     self.UserImage.setText("This is an Image") 
     self.UserImage.setObjectName("UserImage") 
     self.horizontalLayout.addWidget(self.UserImage) 
     self.verticalLayout = QtWidgets.QVBoxLayout() 
     self.verticalLayout.setObjectName("verticalLayout") 
     self.UserName = QtWidgets.QLabel(self) 
     self.UserName.setText("My name is jeff") 
     self.UserName.setObjectName("UserName") 
     self.verticalLayout.addWidget(self.UserName) 
     self.UserStatus = QtWidgets.QLabel(self) 
     self.UserStatus.setText("I am available") 
     self.UserStatus.setObjectName("UserStatus") 
     self.verticalLayout.addWidget(self.UserStatus) 
     self.horizontalLayout.addLayout(self.verticalLayout) 
     self.horizontalLayout.setStretch(0, 1) 
     self.horizontalLayout.setStretch(1, 3) 


if __name__ == '__main__': 
    import sys 

    app = QtWidgets.QApplication(sys.argv) 
    listWidget = QtWidgets.QListWidget() 
    item = QtWidgets.QListWidgetItem(listWidget) 
    item_widget = CustomWidget("user") 
    listWidget.addItem(item) 
    listWidget.setItemWidget(item, item_widget) 
    item.setSizeHint(item_widget.sizeHint()) 
    listWidget.show() 
    sys.exit(app.exec_()) 

enter image description here

関連する問題