如何在 PyQt5 中内联列出项目
How to list items inline in 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)
试一试:
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_())
我正在尝试使用 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)
试一试:
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_())