Количество столбцов listwidget в режиме значков при запуске приложения по сравнению с переключением из режима списка - PullRequest
1 голос
/ 20 июня 2020
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)

1 Ответ

0 голосов
/ 10 июля 2020

Решено. Изменено

self.listview.setResizeMode(QListView.ResizeMode.Fixed)

на

self.listview.setResizeMode(QListView.ResizeMode.Adjust)
...