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()

winshell. recycle_bin ( )

Returns a ShellRecycleBin object representing the system Recycle Bin

winshell. undelete ( filepath )

Find the most recent version of filepath to have been recycled and restore it to its original location on the filesystem. If a file already exists at that filepath, the copy will be renamed. The resulting filepath is returned.

class winshell. ShellRecycleBin

An object which represents the union of all the recycle bins on this system. The Shell subsystem doesn’t offer any way to access drive-specific bins (except by coming across them “accidentally” as shell folders within their specific drives).

The object (which is returned from a call to recycle_bin()) is iterable, returning the deleted items wrapped in ShellRecycledItem objects. It also exposes a couple of common-need convenience methods: versions() returns a list of all recycled versions of a given original filepath; andundelete() which restores the most-recently binned version of a given original filepath.

The object has the following methods:

empty ( confirm=Trueshow_progress=Truesound=True )

Empty all system recycle bins, optionally prompting for confirmation, showing progress, and playing a sort of crunching sound.

undelete ( filepath )

cf undelete() which is a convenience wrapper around this method.

versions ( filepath )

Return a (possibly empty) list of all recycled versions of a given filepath. Each item in the list is a ShellRecycledItem.

获取对象的名称和路径
 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回收站相关推荐

  1. 不小心清空了回收站怎么办?回收站清空了怎么恢复

    回收站清空了怎么恢复?不小心清空了回收站怎么办?很多小伙伴以及办公族都有清理电脑内存的习惯,以便加快电脑系统运行.但是往往很多时候不小心清空了回收站后才发现需要用到的重要文件丢失了,这时候想要找回丢失 ...

  2. 不小心清空了回收站怎么恢复文件 回收站清空的文件怎么恢复

    不论是笔记本电脑还是台式机电脑,都有回收站这样的"后悔药",我们许多误删除的文件夹.图片.视频.文档等都能从它里面找到,回收站在灵活运用下能更好地为我们服务,但是使用过程中难免会出 ...

  3. 实用!清空了回收站怎么恢复误删的文件?教你这2招!

    回收站相当于生活中的"垃圾桶",是存放电脑临时删除文件的系统文件夹,一般通过右键-删除的文件和按Delete键删除的文件,都会被放入到回收站里,它就相当于一剂"后悔药&q ...

  4. 清空了回收站怎么找回?你没用过的方法

    清空了回收站怎么找回?回收站虽说是可以存储着之前被普通删除过的文件,以便用户可以进行还原的操作,但是时间较长之后需要对回收站进行清空操作,以保证磁盘的使用,那么对于清空了回收站文件删除了该怎么找回呢? ...

  5. 误操作清空了回收站文件如何找到文件

    我们在删除文件的时候,文件都是先跑到回收站里的,这样的防止我们出现误删的情况,但往往也会出现我们要恢复删除的文件却误操作清空了回收站的情况,那么误操作清空了回收站如何找到呢,下面小编给大家分享误操作清 ...

  6. 不小心清空了回收站怎么恢复,回收站删除的东西可以恢复吗

    不小心清空了回收站怎么恢复?回收站是操作系统提供的一个非常实用的功能,专门为用户保存从电脑硬盘删除的各种数据,因而很多时候我们都会用到回收站,它能够保存各种数据,我们也能够在里面恢复自己想要的数据,比 ...

  7. 怎样恢复清空的回收站?最简单的方法

    怎样恢复清空的回收站?对于Windows版本上回收站功能相信大家都不陌生了,在文件被普通删除后都会在回收站当中,用户可以进行快速还原文件的操作,但是一旦进行了清空或者删除等操作后就比较的麻烦了,那么怎 ...

  8. 不小心清空了回收站怎么恢复?恢复误删除的方法

    不小心清空了回收站怎么恢复?昨晚上在例行清理桌面垃圾后,一个顺手就将回收站清空了.等我开始工作的时候,发现找不到了整理的文件资料.这时候我才意识到,原来被我不小心误删,连带回收站的垃圾一起清空了!到底 ...

  9. 小程序清空textarea_回收站清空了怎么恢复?

    回收站清空了文件怎么恢复?回收站里的文件被删除了,如何还原删除的文件呢?被Shift+Delete彻底删除的文件如何恢复呢?本文将详细介绍误删除文件恢复方法,清空了回收站也可以轻松恢复文件. 回收站清 ...

最新文章

  1. 第五周周记(国庆第三天)
  2. Vivado 随笔(5) 行为仿真(Behavior Simulation)相关事宜?
  3. B+Tree索引为什么可以支持千万级别数据量的查找——讲讲mysql索引的底层数据结构
  4. log4j与commons-logging,slf4j的关系
  5. 康宁玻璃ct值计算公式_防眩光玻璃的硬度及强度
  6. 软考网络工程师学习笔记3-广域通信网
  7. 【C语言】又是排序(指针专题)
  8. 无人机在倾斜摄影时丢片的解决方案
  9. 高分四号数据计算表观反射率
  10. 做了三年Java,java参考文献近五年图书
  11. JAVA 生成随机数两种方式
  12. creator创建密匙库,查询密匙库密匙,校对密匙
  13. python-基础杂集
  14. 【书影观后感 八】《周期》万事皆周期
  15. 小车高速怎么收费标准_高速如何计费 2019高速公路收费标准及计算方法
  16. apple music导入本地歌曲及歌词
  17. 决策树分析例题经典案例_决策树例题经典案例280_决策树在产品满意因素分析中的应用...
  18. 代码实现堆溢出、栈溢出、永久代溢出、直接内存溢出
  19. 这键盘得有磨损多厉害?网友:简直就是骨灰级程序员
  20. 写一个矩阵相乘的函数

热门文章

  1. 回顾我两个月面试阿里,携程,小红书,美团,网易等等(Java岗)
  2. uglifyjs报错 webpack_用webpack的uglifyJS压缩ES6代码报错
  3. 全网最全Android车载应用开发学习路线规划
  4. 机械制造企业如何做好生产插单管理?
  5. chrome谷歌浏览器实现多用户登录
  6. 量化策略多因子选股之SPSS MODLER建模
  7. python已管理员身份执行cmd
  8. 用于游戏开发的 8 大 JavaScript 引擎
  9. HDUOJ 2005
  10. 【Unity3D】Inspector界面属性显隐控制(条件控制)