import sys
from PySide2.QtCore import Slot
from PySide2.QtWidgets import QApplication, QVBoxLayout, QHBoxLayout, QWidget, QMenuBar, QMenu, QListWidget, \
QListWidgetItem, QListView, QDesktopWidget, \
QAction
app = QApplication(sys.argv)
class MainWindow(QWidget):
def __init__(self):
QWidget.__init__(self)
self.showMaximized()
self.mainLayout = QVBoxLayout()
self.listview = QListWidget()
self.menubar = QMenuBar()
self.menuView = QMenu("View")
self.actionList = QAction("List Mode", self)
self.menuView.addAction(self.actionList)
self.actionList.triggered.connect(self.listMode)
self.actionGrid = QAction("Grid Mode", self)
self.menuView.addAction(self.actionGrid)
self.actionGrid.triggered.connect(self.gridMode)
self.menubar.addMenu(self.menuView)
self.bodyLayout = QHBoxLayout()
self.desktop = QDesktopWidget()
self.listview_width = self.desktop.availableGeometry(self).width()*0.7
self.listview.setMaximumWidth(self.listview_width)
self.listview.setMovement(QListView.Movement.Static)
self.listview.setResizeMode(QListView.ResizeMode.Fixed)
self.listview.setUniformItemSizes(True)
self.listview.setSpacing(0)
self.gridMode()
for i in range(50):
item = QListWidgetItem(self.listview)
item.setText("item"+str(i))
self.listview.addItem(item)
self.bodyLayout.addWidget(self.listview)
self.mainLayout.addWidget(self.menubar)
self.mainLayout.addLayout(self.bodyLayout)
self.setLayout(self.mainLayout)
@Slot()
def listMode(self):
self.listview.setViewMode(QListView.ListMode)
@Slot()
def gridMode(self):
self.listview.setViewMode(QListView.IconMode)
def run(self):
self.show()
app.exec_()
if __name__ == "__main__":
window = MainWindow()
window.run()
Если вы запустите это, переключитесь в режим списка и обратно в режим сетки. Первоначальное количество столбцов в режиме сетки показывает меньше столбцов, чем при последующих переключениях в режим сетки. Как мне сделать так, чтобы он изначально выглядел так же, как и последующие переключатели? Сообщение - это в основном код из-за шаблона qt, необходимого для воспроизведения этой проблемы.
EDIT: Решено. Изменено
self.listview.setResizeMode(QListView.ResizeMode.Fixed)
на
self.listview.setResizeMode(QListView.ResizeMode.Adjust)