如何根据日历小部件pyqt5创建文件夹?

how to create a folder according to calendar widgets pyqt5?

我使用 pyqt5 设计器制作了这个UI。

是否可以在日历中选择一天(例如:22-6-2021)文件夹中的所有文件“22-6-2021”显示在列表中如图所示,如果未找到文件 将创建一个具有某种日期格式的文件夹?

也许我可以给你主要的想法.. 您可以为将创建文件夹的日历创建一个事件监听器

....
self.calendar.selectionChanged.connect(self.calendarListener)

def checkFolders(self, date):
    directory = os.getcwd()
    ls = os.listdir(directory)

    for f in ls:
        if f != date:
            new_dir = os.path.join(directory, date)
            os.mkdir(new_dir)

def calendarListener(self):
    qdate = self.calendar.selectedDate()
    y = qdate.year()
    m = qdate.month()
    d = qdate.day()
    date = str(d) + "-" + str(m) + "-" + str(y)
    print(date)
    self.checkFolders(date)

过程是:

  • 获取在QCalendarWidget中选择的QDate,并将其转换为使用特定格式的字符串。
  • 使用前面的字符串,在主目录中进行搜索,如果不存在则创建目录。
  • 使用符合格式的目录设置为QListView的QFileSystemModel的rootIndex。
import os
import sys
from pathlib import Path


from PyQt5.QtCore import QDir
from PyQt5.QtWidgets import (
    QApplication,
    QCalendarWidget,
    QFileSystemModel,
    QListView,
    QVBoxLayout,
    QWidget,
)

CURRENT_DIRECTORY = Path(__file__).resolve().parent


class Widget(QWidget):
    def __init__(self, root_directory, date_format="dd-M-yyyy", parent=None):
        super().__init__(parent)
        self._root_directory = root_directory
        self._date_format = date_format

        self.calendar_widget = QCalendarWidget()
        self.list_view = QListView()

        lay = QVBoxLayout(self)
        lay.addWidget(self.calendar_widget)
        lay.addWidget(self.list_view)

        self.model = QFileSystemModel()
        self.model.setRootPath(os.fspath(self.root_directory))

        self.calendar_widget.selectionChanged.connect(self.handle_selection_changed)

    @property
    def root_directory(self):
        return self._root_directory

    @property
    def date_format(self):
        return self._date_format

    def handle_selection_changed(self):
        if self.list_view.model() is None:
            self.list_view.setModel(self.model)
        dt = self.calendar_widget.selectedDate()
        dt_str = dt.toString(self.date_format)
        folder = os.fspath(self.root_directory / dt_str)
        if not QDir(folder).exists():
            QDir().mkdir(folder)
        self.list_view.setRootIndex(self.model.index(folder))


def main():
    app = QApplication(sys.argv)
    widget = Widget(CURRENT_DIRECTORY)
    widget.show()
    widget.resize(640, 480)
    widget.show()
    app.exec_()


if __name__ == "__main__":
    main()