我从 self.fileSystemModel.fileInfo(index).absoluteFilePath()获取文件路径 删除文件路径是有效的,但压缩它不...我单独尝试了邮政编码,它可以工作。
self.fileSystemModel.fileInfo(index).absoluteFilePath()提供的路径无法压缩...如何从QTreeView获取可以压缩的路径
这是我的代码
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
import os
from zipfile import ZipFile
from os.path import basename
import zipfile
import DiskCleaner_ui
class main(QMainWindow, DiskCleaner_ui.Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
self.openMenu()
systray_icon = QIcon("s.png")
self.systray = QSystemTrayIcon(systray_icon, self)
self.systray.setContextMenu(self.menu)
self.systray.show()
self.systray.showMessage("DC", "Started...", QSystemTrayIcon.Information)
# self.closeapp.triggered.connect(self.close)
self.Duplicate()
self.Unused()
self.Temp()
def openMenu(self):
self.menu = QMenu()
self.restore = QAction("Restore", self)
self.closeapp = QAction("Close", self)
self.menu.addActions([self.restore, self.closeapp])
def on_clicked(self, index):
self.path = self.fileSystemModel.fileInfo(index).absoluteFilePath()
print(self.path)
self.temp_delete_button.clicked.connect(self.delete_file)
self.duplicate_delete_button.clicked.connect(self.delete_file)
self.unused_delete_button.clicked.connect(self.delete_file)
self.temp_zip_button.clicked.connect(self.zip_file)
def zip_file(self):
if os.path.isfile(self.path):
with ZipFile('C:\Windows\DC\zipfile.zip', 'w') as zip:
zip.write(self.path, basename(self.path))
print('file zipped successfully!')
else:
zf = zipfile.ZipFile('C:\Windows\DC\zipfile.zip', "w")
for dirname, subdirs, files in os.walk(self.path):
zf.write(dirname, basename(dirname))
for filename in files:
zf.write(os.path.join(dirname, filename), basename(os.path.join(dirname, filename)))
zf.close()
print('All files/folders zipped successfully!')
def delete_file(self):
if os.path.exists(self.path):
os.remove(self.path)
self.systray.showMessage("DC", "Temporary file/folder Deleted", QSystemTrayIcon.Information)
print('FIle Deleted...')
else:
pass
def Temp(self):
treeView = QTreeView()
fileSystemModel = QFileSystemModel(treeView)
fileSystemModel.setReadOnly(False)
root = fileSystemModel.setRootPath(r'C:\Users\Black Laptop\Desktop\Py1')
treeView.setModel(fileSystemModel)
treeView.setRootIndex(root)
treeView.setSortingEnabled(True)
treeView.clicked.connect(self.on_clicked)
clearAll_button = QPushButton("Clear all Files")
clearAll_button.setFixedSize(90, 30)
self.temp_delete_button = QPushButton('Delete')
self.temp_delete_button.setFixedSize(90, 30)
self.temp_zip_button = QPushButton('Zip file')
self.temp_zip_button.setFixedSize(90, 30)
Layout = QHBoxLayout(self)
Layout.addWidget(clearAll_button)
Layout.addWidget(self.temp_delete_button)
Layout.addWidget(self.temp_zip_button)
Layout.addWidget(treeView)
self.Temp_Tab.setLayout(Layout)
def Duplicate(self):
treeView = QTreeView()
self.fileSystemModel = QFileSystemModel(treeView)
self.fileSystemModel.setReadOnly(False)
root = self.fileSystemModel.setRootPath(r'C:\Users\Black Laptop\Desktop\Py2')
treeView.setModel(self.fileSystemModel)
treeView.setRootIndex(root)
treeView.setSortingEnabled(True)
treeView.clicked.connect(self.on_clicked)
clearAll_button = QPushButton("Clear all Files")
clearAll_button.setFixedSize(90, 30)
self.duplicate_delete_button = QPushButton('Delete')
self.duplicate_delete_button.setFixedSize(90, 30)
zip_button = QPushButton('Zip file')
zip_button.setFixedSize(90, 30)
Layout = QHBoxLayout(self)
Layout.addWidget(clearAll_button)
Layout.addWidget(self.duplicate_delete_button)
Layout.addWidget(zip_button)
Layout.addWidget(treeView)
self.Duplicate_Tab.setLayout(Layout)
def Unused(self):
treeView = QTreeView()
fileSystemModel = QFileSystemModel(treeView)
fileSystemModel.setReadOnly(False)
root = fileSystemModel.setRootPath(r'C:\Users\Black Laptop\Desktop\Py3')
treeView.setModel(fileSystemModel)
treeView.setRootIndex(root)
treeView.setSortingEnabled(True)
treeView.clicked.connect(self.on_clicked)
clearAll_button = QPushButton("Clear all Files")
clearAll_button.setFixedSize(90, 30)
self.unused_delete_button = QPushButton('Delete')
self.unused_delete_button.setFixedSize(90, 30)
zip_button = QPushButton('Zip file')
zip_button.setFixedSize(90, 30)
Layout = QHBoxLayout(self)
Layout.addWidget(clearAll_button)
Layout.addWidget(self.unused_delete_button)
Layout.addWidget(zip_button)
Layout.addWidget(treeView)
self.UnUsed_Tab.setLayout(Layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
H = main()
H.show()
app.exec_()
我收到此错误...
错误C:/ Users / Black Laptop / Desktop / Py1 / 1 - Copy(7).txt Traceback (最近一次调用最后一次):在zip_file中用文件“test2.py”,第107行 ZipFile(dpath,'w')为zip:\ n文件“C:\ Program Files (x86)\ Python36-32 \ lib \ zipfile.py“,第1090行,在__init __ self.fp = io.open(file,filemode)PermissionError:[Errno 13]权限被拒绝: 'C:\ Users \ Black Laptop \ Desktop
答案 0 :(得分:0)
dpath错误...更改为用户目录...新代码
def zip_file(self,):
dpath = r'C:\Users\Black Laptop\Desktop\DC.zip'
if os.path.isfile(self.path):
with ZipFile(dpath, 'w') as zip:
zip.write(self.path, basename(self.path))
print('file zipped successfully!')
else:
zf = zipfile.ZipFile(dpath, "w", )
for dirname, subdirs, files in os.walk(self.path):
zf.write(dirname, basename(dirname))
for filename in files:
zf.write(os.path.join(dirname, filename), basename(os.path.join(dirname, filename)))
zf.close()
print('All files/folders zipped successfully!')