启动应用程序与从listmode切换时iconmode中的listwidget列数

2024-06-01 00:35:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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()

如果运行此操作,请切换到列表模式并返回网格模式。网格模式下的初始列数显示的列数少于随后切换到网格模式的列数。我如何使它最初看起来与后续开关相同?Post主要是代码,因为重现此问题所需的qt样板文件

编辑:已解决。改变

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

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

Tags: importselfdef模式itemlistviewslotqwidget