Как перечислить элементы, встроенные в PyQt5

#python #pyqt #pyqt5

#python #pyqt #pyqt5

Вопрос:

Я пытаюсь перечислить товары по изображениям, используя PyQt5 (что-то вроде интернет-магазинов), поэтому я хочу перечислить их построчно, проблема сейчас в том, что каждый элемент в виджете списка занимает всю строку (я приложил скриншот), вот код

введите описание изображения здесь

 class MyListWidget(QListWidget):
   def __init__(self):
       super().__init__()
       self.setViewMode(QListView.IconMode)
       self.setIconSize(QtCore.QSize(300, 300))
       self.setSpacing(5)

class TabClass(QWidget):
   def __init__(self, *args, **kwargs):
       super().__init__(*args, **kwargs)

       self.vbox_layout = QVBoxLayout()

       self.list_widget = MyListWidget()

       for i in range(10):
           item = QListWidgetItem()
           item.setText(f'item {i}')
           icon = QtGui.QIcon()
           icon.addPixmap(QtGui.QPixmap("C:/Users/Mohammad Samir/Desktop/p1419921.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
           item.setIcon(icon)
           self.list_widget.addItem(item)


       self.vbox_layout.addWidget(self.list_widget)

       self.setLayout(self.vbox_layout)
  

Ответ №1:

Попробуйте:

 from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.Qt import *


class MyListWidget(QListWidget):
    def __init__(self):
        super().__init__()
        self.setViewMode(QListView.IconMode)
        self.setIconSize(QtCore.QSize(300, 300))
        self.setSpacing(5)
        
#     vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        self.setEditTriggers(self.NoEditTriggers)
        self.setDefaultDropAction(QtCore.Qt.IgnoreAction)
        self.setSelectionMode(self.ContiguousSelection)
        self.setFlow(self.LeftToRight)
        self.setWrapping(True)
        self.setResizeMode(self.Adjust)
#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        

class TabClass(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.list_widget = MyListWidget()
       
        for i in range(10):
            item = QListWidgetItem()
            item.setText(f'item {i}')
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("lena.jpg"),  
                           QtGui.QIcon.Normal, QtGui.QIcon.Off)
            item.setIcon(icon)
            self.list_widget.addItem(item)

        self.vbox_layout = QVBoxLayout()
        self.vbox_layout.addWidget(self.list_widget)
        self.setLayout(self.vbox_layout)
       

if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    w = TabClass()
    w.resize(680, 480)
    w.show()
    sys.exit(app.exec_())
  

введите описание изображения здесь

Комментарии:

1. Да, это сработало! Большое вам спасибо за вашу помощь, интересно, есть ли источник, где я могу найти эти методы и прочитать об этом, потому что документация PyQt5 — одна из самых нелепых вещей, которые я когда-либо видел!

2. @MohamedSamir В документации вы можете найти все, что вам нужно. Проверьте это еще раз. doc.qt.io/qt-5/qlistwidget-members.html

3. Они используют код на C , я имею в виду, что документация для версии python очень ограничена.