Skip to content

Commit 7535ded

Browse files
Add files via upload
1 parent 6243616 commit 7535ded

13 files changed

+619
-0
lines changed

README.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Windows Cleaner——专治C盘爆红及各种不服!
2+
## 运行截图
3+
![show](readme/s.jpg)
4+
## 使用方法
5+
### 下载安装包
6+
7+
[蓝奏云网盘](https://wwt.lanzn.com/i2dEZ1onczzg)下载Windows Cleaner(amd64)的安装包。
8+
9+
密码:1djs
10+
11+
### 安装
12+
一路Next即可,如果想以后方便打开可以勾选上`创建桌面快捷方式`选项。
13+
14+
### 从源代码构建
15+
16+
- Python 3.8
17+
18+
[Bilibili:阳刚の少年](https://space.bilibili.com/1847808902?spm_id_from=333.1007.0.0)
19+
20+
[<img src="readme/d.png" alt="Example Image" style="width: 200px;"/>](readme/develop.jpg)

font/DingTalk_JinBuTi_Regular.ttf

2.03 MB
Binary file not shown.

font/pmzd.ttf

3.09 MB
Binary file not shown.

main.py

+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import sys
2+
from PyQt6.QtWidgets import QApplication, QMainWindow, QMessageBox
3+
from ui import Ui_MainWindow
4+
from PyQt6.QtCore import Qt,QPoint
5+
from PyQt6.QtGui import QMouseEvent, QIcon
6+
import os
7+
import shutil
8+
import psutil
9+
10+
class Cleaner(QMainWindow, Ui_MainWindow):
11+
def __init__(self):
12+
super().__init__()
13+
# 创建UI对象
14+
self.ui = Ui_MainWindow()
15+
# 设置UI
16+
self.ui.setupUi(self)
17+
self.setWindowFlag(Qt.WindowType.FramelessWindowHint, True)
18+
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground, True)
19+
#self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint, True)
20+
self.setMouseTracking(True)
21+
self.draggable = False
22+
self.offset = QPoint()
23+
self.setWindowTitle("Windows Cleaner")
24+
self.ui.pushButton.clicked.connect(self.boost)
25+
self.ui.pushButton_2.clicked.connect(self.clean)
26+
self.flag = False
27+
28+
def mousePressEvent(self, event: QMouseEvent):
29+
if event.button() == Qt.MouseButton.LeftButton:
30+
self.draggable = True
31+
self.offset = event.pos()
32+
33+
def mouseMoveEvent(self, event: QMouseEvent):
34+
if self.draggable:
35+
self.move(self.mapToGlobal(event.pos() - self.offset))
36+
37+
def mouseReleaseEvent(self, event: QMouseEvent):
38+
if event.button() == Qt.MouseButton.LeftButton:
39+
self.draggable = False
40+
41+
def get_v(self):
42+
# 获取C盘的使用情况
43+
usage = psutil.disk_usage('C:\\') # 请注意在Windows上使用双反斜杠来表示路径
44+
45+
# 获取已用空间(以MB为单位)
46+
used_space_mb = round(usage.used / (1024 ** 2), 2) # 转换为MB
47+
print(f"已用空间: {used_space_mb} MB")
48+
return used_space_mb
49+
50+
def boost(self):
51+
print("优化加速")
52+
self.ui.label_3.setText("优化加速中······")
53+
v0 = self.get_v()
54+
self.boost_prefetch('C:\\Windows\\Prefetch')
55+
self.clean_temp_folder()
56+
v1 = self.get_v()
57+
self.ui.label_3.setText(f"加速完成!\n清理出{format(v0 - v1,'.2f')}MB空间")
58+
59+
def boost_prefetch(self, folder_path):
60+
# 获取管理员权限
61+
if not os.access(folder_path, os.W_OK):
62+
raise PermissionError("You don't have permission to delete files in this folder.")
63+
64+
# 遍历文件夹并删除文件
65+
for filename in os.listdir(folder_path):
66+
file_path = os.path.join(folder_path, filename)
67+
try:
68+
if os.path.isfile(file_path):
69+
os.remove(file_path)
70+
elif os.path.isdir(file_path):
71+
shutil.rmtree(file_path)
72+
print(f"Deleted: {file_path}")
73+
except Exception as e:
74+
print(f"Failed to delete: {file_path}, Error: {e}")
75+
76+
def clean_temp_folder(self):
77+
temp_folder = os.environ.get('TEMP')
78+
for root, dirs, files in os.walk(temp_folder):
79+
for file in files:
80+
try:
81+
os.remove(os.path.join(root, file))
82+
print("Delete successfully")
83+
except Exception as e:
84+
print(f"Failed to delete {os.path.join(root, file)}: {e}")
85+
print("Temporary files cleaned successfully")
86+
87+
def clean(self):
88+
print("深度清理")
89+
self.ui.label_3.setText("深度清理中······")
90+
v0 = self.get_v()
91+
self.boost_prefetch('C:\\Windows\\SoftwareDistribution\\Download')
92+
self.boost_prefetch('C:\\Windows\\Prefetch')
93+
self.clean_temp_folder()
94+
v1 = self.get_v()
95+
self.ui.label_3.setText(f"加速完成!\n清理出{format(v0 - v1, '.2f')}MB空间")
96+
# 执行磁盘清理命令
97+
messageBox = QMessageBox()
98+
#messageBox.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint) # 设置置顶
99+
messageBox.setWindowTitle('是否继续清理?')
100+
messageBox.setWindowIcon(QIcon('resource/clean.png'))
101+
messageBox.setText(f"是否使用'磁盘清理'工具继续清理?")
102+
messageBox.setStandardButtons(QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel)
103+
response = messageBox.exec()
104+
if response == QMessageBox.StandardButton.Ok:
105+
print("You clicked OK")
106+
try:
107+
os.popen("cleanmgr")
108+
except Exception as e:
109+
print(f"error{e}")
110+
else:
111+
print("You clicked Cancel")
112+
113+
messageBox = QMessageBox()
114+
#messageBox.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint) # 设置置顶
115+
messageBox.setWindowTitle('是否继续清理?')
116+
messageBox.setWindowIcon(QIcon('resource/clean.png'))
117+
messageBox.setText(f"是否从'存储'删除临时文件?\n注意:此操作可能并不适用于所有Windows版本。")
118+
messageBox.setStandardButtons(QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel)
119+
response = messageBox.exec()
120+
if response == QMessageBox.StandardButton.Ok:
121+
print("You clicked OK")
122+
try:
123+
os.system('start ms-settings:storagesense')
124+
except Exception as e:
125+
print(f"error{e}")
126+
else:
127+
print("You clicked Cancel")
128+
129+
130+
if __name__ == '__main__':
131+
app = QApplication(sys.argv)
132+
form = Cleaner()
133+
form.show()
134+
sys.exit(app.exec())

readme/d.png

3.49 KB
Loading

readme/develop.jpg

22.3 KB
Loading

readme/s.jpg

86.8 KB
Loading

requirements.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
PyQt6==6.4.2
2+
pyqt6-tools==6.4.2.3.3
3+
psutil

resource/booster.png

7.9 KB
Loading

resource/clean.png

8.8 KB
Loading

resource/resource.qrc

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<RCC>
2+
<qresource prefix="resource">
3+
<file>booster.png</file>
4+
<file>sclean.png</file>
5+
<file>clean.png</file>
6+
</qresource>
7+
</RCC>

ui.py

+160
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# Form implementation generated from reading ui file 'ui.ui'
2+
#
3+
# Created by: PyQt6 UI code generator 6.4.2
4+
#
5+
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
6+
# run again. Do not edit this file unless you know what you are doing.
7+
8+
9+
from PyQt6 import QtCore, QtGui, QtWidgets
10+
from PyQt6.QtGui import QPixmap, QFont, QFontDatabase, QIcon
11+
12+
13+
class Ui_MainWindow(object):
14+
def setupUi(self, MainWindow):
15+
MainWindow.setObjectName("MainWindow")
16+
MainWindow.resize(608, 504)
17+
MainWindow.setWindowIcon(QIcon('resource/clean.png'))
18+
19+
# 加载字体文件
20+
font_id = QFontDatabase.addApplicationFont("font/DingTalk_JinBuTi_Regular.ttf")
21+
# 获取字体家族名称
22+
font_families = QFontDatabase.applicationFontFamilies(font_id)
23+
font_family = font_families[0]
24+
# 创建字体对象
25+
self.font = QFont(font_family)
26+
27+
# 加载字体文件
28+
font_id1 = QFontDatabase.addApplicationFont("font/pmzd.ttf")
29+
# 获取字体家族名称
30+
font_families1 = QFontDatabase.applicationFontFamilies(font_id1)
31+
font_family1 = font_families1[0]
32+
# 创建字体对象
33+
self.font1 = QFont(font_family1)
34+
35+
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
36+
self.centralwidget.setObjectName("centralwidget")
37+
self.label = QtWidgets.QLabel(parent=self.centralwidget)
38+
self.label.setGeometry(QtCore.QRect(60, 50, 321, 341))
39+
self.label.setStyleSheet("background-color:rgba(255, 255, 255, 240);\n"
40+
"border-radius:30px;")
41+
self.label.setText("")
42+
self.label.setObjectName("label")
43+
self.pushButton = QtWidgets.QPushButton(parent=self.centralwidget)
44+
self.pushButton.setGeometry(QtCore.QRect(90, 126, 260, 90))
45+
font = QtGui.QFont(self.font1)
46+
font.setPointSize(33)
47+
self.pushButton.setFont(font)
48+
self.pushButton.setStyleSheet("QPushButton{\n"
49+
" background-color:rgba(0,0,0,13);\n"
50+
" color:rgb(0, 0, 0);\n"
51+
" border-radius:13px;\n"
52+
"}\n"
53+
"QPushButton:hover{\n"
54+
" background-color:rgb(170, 170, 255);\n"
55+
"}")
56+
icon = QtGui.QIcon()
57+
icon.addPixmap(QtGui.QPixmap("resource/booster.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
58+
self.pushButton.setIcon(icon)
59+
self.pushButton.setIconSize(QtCore.QSize(66, 66))
60+
self.pushButton.setObjectName("pushButton")
61+
self.pushButton_2 = QtWidgets.QPushButton(parent=self.centralwidget)
62+
self.pushButton_2.setGeometry(QtCore.QRect(90, 230, 260, 90))
63+
font = QtGui.QFont(self.font1)
64+
font.setPointSize(33)
65+
self.pushButton_2.setFont(font)
66+
self.pushButton_2.setStyleSheet("QPushButton{\n"
67+
" background-color:rgba(0,0,0,13);\n"
68+
" color:rgb(0, 0, 0);\n"
69+
" border-radius:13px;\n"
70+
"}\n"
71+
"QPushButton:hover{\n"
72+
" background-color:rgb(170, 170, 255);\n"
73+
"}")
74+
icon1 = QtGui.QIcon()
75+
icon1.addPixmap(QtGui.QPixmap("resource/clean.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
76+
self.pushButton_2.setIcon(icon1)
77+
self.pushButton_2.setIconSize(QtCore.QSize(66, 66))
78+
self.pushButton_2.setObjectName("pushButton_2")
79+
self.label_3 = QtWidgets.QLabel(parent=self.centralwidget)
80+
self.label_3.setGeometry(QtCore.QRect(90, 340, 261, 41))
81+
font = QtGui.QFont()
82+
font.setBold(True)
83+
self.label_3.setFont(font)
84+
self.label_3.setObjectName("label_3")
85+
self.layoutWidget = QtWidgets.QWidget(parent=self.centralwidget)
86+
self.layoutWidget.setGeometry(QtCore.QRect(90, 70, 261, 35))
87+
self.layoutWidget.setObjectName("layoutWidget")
88+
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget)
89+
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
90+
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
91+
self.label_2 = QtWidgets.QLabel(parent=self.layoutWidget)
92+
font = QtGui.QFont(self.font)
93+
font.setPointSize(16)
94+
self.label_2.setFont(font)
95+
self.label_2.setObjectName("label_2")
96+
self.horizontalLayout_2.addWidget(self.label_2)
97+
self.horizontalLayout = QtWidgets.QHBoxLayout()
98+
self.horizontalLayout.setObjectName("horizontalLayout")
99+
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
100+
self.horizontalLayout.addItem(spacerItem)
101+
self.hidewindow = QtWidgets.QPushButton(parent=self.layoutWidget)
102+
self.hidewindow.setMinimumSize(QtCore.QSize(31, 31))
103+
self.hidewindow.setMaximumSize(QtCore.QSize(31, 31))
104+
font = QtGui.QFont()
105+
font.setPointSize(30)
106+
font.setBold(False)
107+
self.hidewindow.setFont(font)
108+
self.hidewindow.setStyleSheet("QPushButton{\n"
109+
" background-color:rgba(0,0,0,6);\n"
110+
" color:rgb(0, 0, 0);\n"
111+
" border-radius:5px;\n"
112+
"}\n"
113+
"QPushButton:hover{\n"
114+
" background-color:rgb(170, 170, 255);\n"
115+
"}")
116+
self.hidewindow.setObjectName("hidewindow")
117+
self.horizontalLayout.addWidget(self.hidewindow)
118+
self.quit = QtWidgets.QPushButton(parent=self.layoutWidget)
119+
self.quit.setMinimumSize(QtCore.QSize(31, 31))
120+
self.quit.setMaximumSize(QtCore.QSize(31, 31))
121+
font = QtGui.QFont()
122+
font.setPointSize(15)
123+
font.setBold(True)
124+
self.quit.setFont(font)
125+
self.quit.setStyleSheet("QPushButton{\n"
126+
" background-color:rgba(0,0,0,6);\n"
127+
" color:rgb(0, 0, 0);\n"
128+
" border-radius:5px;\n"
129+
"}\n"
130+
"QPushButton:hover{\n"
131+
" background-color:rgb(255, 0, 0);\n"
132+
"}")
133+
self.quit.setObjectName("quit")
134+
self.horizontalLayout.addWidget(self.quit)
135+
self.horizontalLayout_2.addLayout(self.horizontalLayout)
136+
MainWindow.setCentralWidget(self.centralwidget)
137+
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
138+
self.menubar.setGeometry(QtCore.QRect(0, 0, 608, 22))
139+
self.menubar.setObjectName("menubar")
140+
MainWindow.setMenuBar(self.menubar)
141+
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
142+
self.statusbar.setSizeGripEnabled(False)
143+
self.statusbar.setObjectName("statusbar")
144+
MainWindow.setStatusBar(self.statusbar)
145+
146+
self.retranslateUi(MainWindow)
147+
self.quit.clicked.connect(MainWindow.close) # type: ignore
148+
self.hidewindow.clicked.connect(MainWindow.showMinimized) # type: ignore
149+
QtCore.QMetaObject.connectSlotsByName(MainWindow)
150+
151+
def retranslateUi(self, MainWindow):
152+
_translate = QtCore.QCoreApplication.translate
153+
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
154+
self.pushButton.setText(_translate("MainWindow", "优化加速"))
155+
self.pushButton_2.setText(_translate("MainWindow", "深度清理"))
156+
self.label_3.setText(_translate("MainWindow", "Developed By DaYe\n"
157+
"https://dyblog.netlify.app/"))
158+
self.label_2.setText(_translate("MainWindow", "WindowsCleaner"))
159+
self.hidewindow.setText(_translate("MainWindow", "-"))
160+
self.quit.setText(_translate("MainWindow", "X"))

0 commit comments

Comments
 (0)