如何根据日历小部件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()
我使用 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()