2017-11-23 20 views
0

각각 맞춤 위젯 인 항목의 목록을 디자인하려고합니다 (각 항목에 이미지와 텍스트 세 개를 표시하고 싶지는 않습니다). PyQt에서 함수 을 사용하여 목록에 항목을 추가 할 수 있습니다. 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