Pyqt清空Win回收站
Pyqt清空回收站其实的调用Python的第三方库,通过第三方库调用windows的api删除回收站的数据
一. 准备工作
先下载第三方库winshell
下载地址: https://github.com/tjguk/winshell/tree/stable
关于winshell的文档: http://winshell.readthedocs.org/en/latest/recycle-bin.html#winshell.ShellRecycleBin.versions
该库依赖于win32con (自行下载安装)
安装winshell
1 python setup.py install
使用的时候 import winshell
二. 创建UI
用Py Designer 设计出UI,本部分主要用到pyqt的 QTableWidget
1 <?xml version="1.0" encoding="UTF-8"?> 2 <ui version="4.0"> 3 <class>recycleBin</class> 4 <widget class="QWidget" name="recycleBin"> 5 <property name="geometry"> 6 <rect> 7 <x>0</x> 8 <y>0</y> 9 <width>640</width> 10 <height>422</height> 11 </rect> 12 </property> 13 <property name="windowTitle"> 14 <string>Form</string> 15 </property> 16 <widget class="QGroupBox" name="groupBox"> 17 <property name="geometry"> 18 <rect> 19 <x>30</x> 20 <y>20</y> 21 <width>561</width> 22 <height>311</height> 23 </rect> 24 </property> 25 <property name="title"> 26 <string>回收站列表</string> 27 </property> 28 <widget class="QTableWidget" name="tableWidget"> 29 <property name="geometry"> 30 <rect> 31 <x>10</x> 32 <y>20</y> 33 <width>541</width> 34 <height>271</height> 35 </rect> 36 </property> 37 <column> 38 <property name="text"> 39 <string>名称</string> 40 </property> 41 <property name="font"> 42 <font> 43 <pointsize>12</pointsize> 44 <weight>50</weight> 45 <bold>false</bold> 46 </font> 47 </property> 48 </column> 49 <column> 50 <property name="text"> 51 <string>路径</string> 52 </property> 53 <property name="font"> 54 <font> 55 <pointsize>12</pointsize> 56 </font> 57 </property> 58 </column> 59 </widget> 60 </widget> 61 <widget class="QPushButton" name="pushButtonok"> 62 <property name="geometry"> 63 <rect> 64 <x>470</x> 65 <y>360</y> 66 <width>75</width> 67 <height>23</height> 68 </rect> 69 </property> 70 <property name="text"> 71 <string>清空</string> 72 </property> 73 </widget> 74 </widget> 75 <resources/> 76 <connections/> 77 </ui>
预览:
然后 将Ui转换为py文件
三. 逻辑的实现
选引入winshell
1 import winshell
获取 回收站里面的对象
1 All_files = winshell.recycle_bin()
|
- 获取对象的名称和路径
1 self.dicFile = {} 2 if All_files: 3 for fileitem in All_files: 4 Fpath = str(fileitem.name()) # 获取文件的路径 5 FsplitName = Fpath.split('\\') 6 Fname=FsplitName[-1] # 获取文件的名称 7 self.dicFile[Fname] = Fpath 8 else: 9 # self.initUi.tableWidget.hide() # 回收站没有东西,隐藏tableWidget 不同电脑系统有的不执行该方法 10 self.emptytable()
将获取的数据保存在dicFile中,循环dicFile输出在 tableWidget 中
1 if self.dicFile: 2 Rowcount = len(self.dicFile) # 求出回收站项目的个数 3 self.initUi.tableWidget.setColumnCount(2) # 列数固定为2 4 self.initUi.tableWidget.setRowCount(Rowcount) # 行数为项目的个数 5 self.initUi.tableWidget.setColumnWidth(1,400) # 设置第2列宽度为400像素 6 i = 0 7 for datakey,datavalue in self.dicFile.items(): 8 newItem = QtGui.QTableWidgetItem(unicode(datakey)) 9 newItemPath = QtGui.QTableWidgetItem(unicode(datavalue)) 10 self.initUi.tableWidget.setItem(i, 0, newItem) 11 self.initUi.tableWidget.setItem(i, 1, newItemPath) 12 i += 1 13 else: 14 self.emptytable()
判断回收站是否有数据对象
1 self.initUi.tableWidget.setColumnCount(2) 2 self.initUi.tableWidget.setRowCount(8) 3 self.initUi.tableWidget.setColumnWidth(1,400) 4 self.initUi.tableWidget.verticalHeader().setVisible(False) 5 self.initUi.tableWidget.horizontalHeader().setVisible(False) 6 textfont = QtGui.QFont("song", 17, QtGui.QFont.Bold) 7 empinfo=QtGui.QTableWidgetItem(u'回收站内容为空,无需清理!') 8 empinfo.setFont(textfont) 9 self.initUi.tableWidget.setItem(0, 0, empinfo) 10 self.initUi.tableWidget.setSpan(0, 0, 8, 2) 11 self.initUi.pushButtonok.hide()
完整代码:
1 # -*- coding: utf-8 -*- 2 3 # Form implementation generated from reading ui file 'recycle.ui' 4 # 5 # Created: Thu Jan 15 19:14:32 2015 6 # by: PyQt4 UI code generator 4.10.3 7 # 8 # WARNING! All changes made in this file will be lost! 9 10 from PyQt4 import QtCore, QtGui 11 12 try: 13 _fromUtf8 = QtCore.QString.fromUtf8 14 except AttributeError: 15 def _fromUtf8(s): 16 return s 17 18 try: 19 _encoding = QtGui.QApplication.UnicodeUTF8 20 def _translate(context, text, disambig): 21 return QtGui.QApplication.translate(context, text, disambig, _encoding) 22 except AttributeError: 23 def _translate(context, text, disambig): 24 return QtGui.QApplication.translate(context, text, disambig) 25 26 class Ui_recycleBin(object): 27 def setupUi(self, recycleBin): 28 recycleBin.setObjectName(_fromUtf8("recycleBin")) 29 recycleBin.resize(640, 422) 30 self.groupBox = QtGui.QGroupBox(recycleBin) 31 self.groupBox.setGeometry(QtCore.QRect(30, 20, 561, 311)) 32 self.groupBox.setObjectName(_fromUtf8("groupBox")) 33 self.tableWidget = QtGui.QTableWidget(self.groupBox) 34 self.tableWidget.setGeometry(QtCore.QRect(10, 20, 541, 271)) 35 self.tableWidget.setObjectName(_fromUtf8("tableWidget")) 36 self.tableWidget.setColumnCount(2) 37 self.tableWidget.setRowCount(0) 38 item = QtGui.QTableWidgetItem() 39 font = QtGui.QFont() 40 font.setPointSize(12) 41 font.setBold(False) 42 font.setWeight(50) 43 item.setFont(font) 44 self.tableWidget.setHorizontalHeaderItem(0, item) 45 item = QtGui.QTableWidgetItem() 46 font = QtGui.QFont() 47 font.setPointSize(12) 48 item.setFont(font) 49 self.tableWidget.setHorizontalHeaderItem(1, item) 50 self.pushButtonok = QtGui.QPushButton(recycleBin) 51 self.pushButtonok.setGeometry(QtCore.QRect(470, 360, 75, 23)) 52 self.pushButtonok.setObjectName(_fromUtf8("pushButtonok")) 53 54 self.retranslateUi(recycleBin) 55 QtCore.QMetaObject.connectSlotsByName(recycleBin) 56 57 def retranslateUi(self, recycleBin): 58 recycleBin.setWindowTitle(_translate("recycleBin", "Form", None)) 59 self.groupBox.setTitle(_translate("recycleBin", "回收站列表", None)) 60 item = self.tableWidget.horizontalHeaderItem(0) 61 item.setText(_translate("recycleBin", "名称", None)) 62 item = self.tableWidget.horizontalHeaderItem(1) 63 item.setText(_translate("recycleBin", "路径", None)) 64 self.pushButtonok.setText(_translate("recycleBin", "清空", None)) 65 66 67 68 69 import winshell 70 #逻辑class 71 class Logicpy(QtGui.QWidget): 72 def __init__(self): 73 super(Logicpy, self).__init__() 74 self.initUi = Ui_recycleBin() 75 self.initUi.setupUi(self) 76 self.setWindowTitle(u'清空回收站') 77 self.initUi.tableWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) # 将表格变为禁止编辑 78 self.initUi.tableWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) # 整行选中的方式 79 self.initUi.tableWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) #设置为可以选中多个目标 80 # self.connect(self.initUi.pushButtonok, QtCore.SIGNAL('clicked()'), self.btnempty('sdf')) 81 self.initUi.pushButtonok.mouseReleaseEvent=self.btnempty 82 reload(sys) 83 sys.setdefaultencoding("utf-8") 84 All_files = winshell.recycle_bin() 85 self.dicFile = {} 86 if All_files: 87 for fileitem in All_files: 88 Fpath = str(fileitem.name()) # 获取文件的路径 89 FsplitName = Fpath.split('\\') 90 Fname=FsplitName[-1] # 获取文件的名称 91 self.dicFile[Fname] = Fpath 92 else: 93 # self.initUi.tableWidget.hide() # 回收站没有东西,隐藏tableWidget 不同电脑系统有的不执行该方法 94 self.emptytable() 95 96 self.interData() 97 # 插入recycleBin 对象 98 def interData(self): 99 if self.dicFile: 100 Rowcount = len(self.dicFile) # 求出回收站项目的个数 101 self.initUi.tableWidget.setColumnCount(2) # 列数固定为2 102 self.initUi.tableWidget.setRowCount(Rowcount) # 行数为项目的个数 103 self.initUi.tableWidget.setColumnWidth(1,400) # 设置第2列宽度为400像素 104 i = 0 105 for datakey,datavalue in self.dicFile.items(): 106 newItem = QtGui.QTableWidgetItem(unicode(datakey)) 107 newItemPath = QtGui.QTableWidgetItem(unicode(datavalue)) 108 self.initUi.tableWidget.setItem(i, 0, newItem) 109 self.initUi.tableWidget.setItem(i, 1, newItemPath) 110 i += 1 111 else: 112 self.emptytable() 113 # 运行程序时, 回收站为空 114 def emptytable(self): 115 self.initUi.tableWidget.setColumnCount(2) 116 self.initUi.tableWidget.setRowCount(8) 117 self.initUi.tableWidget.setColumnWidth(1,400) 118 self.initUi.tableWidget.verticalHeader().setVisible(False) 119 self.initUi.tableWidget.horizontalHeader().setVisible(False) 120 textfont = QtGui.QFont("song", 17, QtGui.QFont.Bold) 121 empinfo=QtGui.QTableWidgetItem(u'回收站内容为空,无需清理!') 122 empinfo.setFont(textfont) 123 self.initUi.tableWidget.setItem(0, 0, empinfo) 124 self.initUi.tableWidget.setSpan(0, 0, 8, 2) 125 self.initUi.pushButtonok.hide() 126 # 触发btn时清空回收站 127 def btnempty(self,event): 128 ev=event.button() 129 OK = winshell.ShellRecycleBin.empty() # 如何判断返回类型? 130 self.close() 131 132 133 134 135 136 #重载keyPressEvent , 当按下Esc退出 137 def keyPressEvent(self, event): 138 if event.key() ==QtCore.Qt.Key_Escape: 139 self.close() 140 141 142 143 144 if __name__ == "__main__": 145 import sys 146 app = QtGui.QApplication(sys.argv) 147 RecycleLogic = Logicpy() 148 RecycleLogic.show() 149 sys.exit(app.exec_())
五. 运行效果
转载于:https://www.cnblogs.com/dcb3688/p/4233190.html
Pyqt清空Win回收站相关推荐
- 不小心清空了回收站怎么办?回收站清空了怎么恢复
回收站清空了怎么恢复?不小心清空了回收站怎么办?很多小伙伴以及办公族都有清理电脑内存的习惯,以便加快电脑系统运行.但是往往很多时候不小心清空了回收站后才发现需要用到的重要文件丢失了,这时候想要找回丢失 ...
- 不小心清空了回收站怎么恢复文件 回收站清空的文件怎么恢复
不论是笔记本电脑还是台式机电脑,都有回收站这样的"后悔药",我们许多误删除的文件夹.图片.视频.文档等都能从它里面找到,回收站在灵活运用下能更好地为我们服务,但是使用过程中难免会出 ...
- 实用!清空了回收站怎么恢复误删的文件?教你这2招!
回收站相当于生活中的"垃圾桶",是存放电脑临时删除文件的系统文件夹,一般通过右键-删除的文件和按Delete键删除的文件,都会被放入到回收站里,它就相当于一剂"后悔药&q ...
- 清空了回收站怎么找回?你没用过的方法
清空了回收站怎么找回?回收站虽说是可以存储着之前被普通删除过的文件,以便用户可以进行还原的操作,但是时间较长之后需要对回收站进行清空操作,以保证磁盘的使用,那么对于清空了回收站文件删除了该怎么找回呢? ...
- 误操作清空了回收站文件如何找到文件
我们在删除文件的时候,文件都是先跑到回收站里的,这样的防止我们出现误删的情况,但往往也会出现我们要恢复删除的文件却误操作清空了回收站的情况,那么误操作清空了回收站如何找到呢,下面小编给大家分享误操作清 ...
- 不小心清空了回收站怎么恢复,回收站删除的东西可以恢复吗
不小心清空了回收站怎么恢复?回收站是操作系统提供的一个非常实用的功能,专门为用户保存从电脑硬盘删除的各种数据,因而很多时候我们都会用到回收站,它能够保存各种数据,我们也能够在里面恢复自己想要的数据,比 ...
- 怎样恢复清空的回收站?最简单的方法
怎样恢复清空的回收站?对于Windows版本上回收站功能相信大家都不陌生了,在文件被普通删除后都会在回收站当中,用户可以进行快速还原文件的操作,但是一旦进行了清空或者删除等操作后就比较的麻烦了,那么怎 ...
- 不小心清空了回收站怎么恢复?恢复误删除的方法
不小心清空了回收站怎么恢复?昨晚上在例行清理桌面垃圾后,一个顺手就将回收站清空了.等我开始工作的时候,发现找不到了整理的文件资料.这时候我才意识到,原来被我不小心误删,连带回收站的垃圾一起清空了!到底 ...
- 小程序清空textarea_回收站清空了怎么恢复?
回收站清空了文件怎么恢复?回收站里的文件被删除了,如何还原删除的文件呢?被Shift+Delete彻底删除的文件如何恢复呢?本文将详细介绍误删除文件恢复方法,清空了回收站也可以轻松恢复文件. 回收站清 ...
最新文章
- 第五周周记(国庆第三天)
- Vivado 随笔(5) 行为仿真(Behavior Simulation)相关事宜?
- B+Tree索引为什么可以支持千万级别数据量的查找——讲讲mysql索引的底层数据结构
- log4j与commons-logging,slf4j的关系
- 康宁玻璃ct值计算公式_防眩光玻璃的硬度及强度
- 软考网络工程师学习笔记3-广域通信网
- 【C语言】又是排序(指针专题)
- 无人机在倾斜摄影时丢片的解决方案
- 高分四号数据计算表观反射率
- 做了三年Java,java参考文献近五年图书
- JAVA 生成随机数两种方式
- creator创建密匙库,查询密匙库密匙,校对密匙
- python-基础杂集
- 【书影观后感 八】《周期》万事皆周期
- 小车高速怎么收费标准_高速如何计费 2019高速公路收费标准及计算方法
- apple music导入本地歌曲及歌词
- 决策树分析例题经典案例_决策树例题经典案例280_决策树在产品满意因素分析中的应用...
- 代码实现堆溢出、栈溢出、永久代溢出、直接内存溢出
- 这键盘得有磨损多厉害?网友:简直就是骨灰级程序员
- 写一个矩阵相乘的函数