Code: Select all
import sys
import os
from PySide2.QtGui import QPixmap, QIcon, QStandardItemModel, QStandardItem
from PySide2.QtWidgets import (
QApplication,
QWidget,
QVBoxLayout,
QListView,
)
from PySide2.QtCore import Qt, QDir, QSize
class Example(QWidget):
def __init__(self):
super().__init__()
self.layout = QVBoxLayout(self)
# File list view setup
self.file_list_view = QListView(self)
self.file_list_view.setFixedHeight(200)
self.layout.addWidget(self.file_list_view)
# File model
self.file_model = QStandardItemModel(self)
self.file_list_view.setModel(self.file_model)
# Custom scrollbar style
self.file_list_view.verticalScrollBar().setStyleSheet(
"""
QScrollBar:vertical {
width: 30px;
background-color: transparent;
border: none;
}
QScrollBar::handle:vertical {
background-color: rgb(100,100,100);
border-radius: 5px;
min-height: 50px;
}
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
border: none;
background: transparent;
}
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
background: transparent;
}
"""
)
def populate_directory_view(self, dir_path):
self.file_model.clear()
self.dir_path = str(dir_path)
# Use os.listdir to get the file names (instead of QDir)
files = os.listdir(self.dir_path)
for file in files:
file_item = QStandardItem(file)
file_item.setTextAlignment(Qt.AlignCenter) # Center the text
file_item.setEditable(False)
self.file_model.appendRow(file_item)
# Set the view mode and remove icons
self.file_list_view.setViewMode(QListView.ListMode)
self.file_list_view.setIconSize(QSize(0, 0))
def reset(self):
self.file_model.clear()
self.dir_path = ""
if __name__ == "__main__":
app = QApplication(sys.argv)
viewer = Example()
viewer.show()
# Test directory path (use any valid directory on your machine)
test_directory = ... # Replace with your own test directory path
viewer.populate_directory_view(test_directory)
sys.exit(app.exec_())