我对QTextedit中的实时更新有问题,因为执行时,屏幕在执行计算时会保持静止几秒钟,但是我需要的是QTextedit中的状态消息在显示时与仿真一起前进。我已经尝试过使用线程,但是由于它无法解决问题,所以我不太了解,如果有人可以帮助我,我将不胜感激,因为我在Pyqt5中处理的线程问题不多。 (我不明白)非常感谢
我附上界面代码:
TempClean.py
# -*- coding:utf-8 -*-
import os
import sys
import shutil
import getpass
import Optimization
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import time
tmp = ""
deleteFileCount = 0
deleteFolderCount = 0
class TempRemove(QMainWindow, Optimization.Ui_OptimalWindow):
def __init__(self, parent = None):
super(QMainWindow, self).__init__(parent)
self.initUI(self)
self.Clean()
def Task(self, folderName):
global tmp, deleteFileCount, deleteFolderCount
for the_file in os.listdir(folderName):
file_path = os.path.join(folderName, the_file)
indexNo = file_path.find('\\')
itemName = file_path[indexNo + 1:]
try:
self.show()
self.ScanInfo.repaint()
if os.path.isfile(file_path):
os.unlink(file_path)
self.ScanInfo.append(str(tmp + ('%s file deleted' % itemName)))
deleteFileCount = deleteFileCount + 1
elif os.path.isdir(file_path):
if file_path.__contains__('chocolatey'):
continue
shutil.rmtree(file_path)
self.ScanInfo.append(str(tmp + ('%s folder deleted' % itemName)))
deleteFolderCount = deleteFolderCount + 1
except Exception as e:
self.ScanInfo.append(str(tmp + ('Access Denied: %s' % itemName)))
# self.ScanInfo.append(str(tmp))
def Clean(self):
self.show()
self.ScanInfo.setText("")
folder = 'C:/Users/' + getpass.getuser() + '\AppData\Local\Temp'
self.Task(folder)
# Chrome
folder = 'C:/Users/' + getpass.getuser() + '\AppData\Local\Google\Chrome\User Data\Default\Cache'
self.Task(folder)
# Internet Explorer
folder = 'C:/Users/' + getpass.getuser() + '\AppData\Local\Microsoft\Windows\INetCache'
self.Task(folder)
# Edge
folder = 'C:/Users/' + getpass.getuser() + '\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\Temp'
self.Task(folder)
global deleteFileCount, deleteFolderCount
result = (str(deleteFileCount) + ' files and ' + str(deleteFolderCount) + ' folders deleted.') + '\n'
self.ScanInfo.append(str(result))
if __name__ == '__main__':
a = QApplication(sys.argv)
app = TempRemove()
app.show()
a.exec_()
Optimization.py
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Ui_OptimalWindow(object):
def initUI(self, OptimalWindow):
OptimalWindow.setObjectName("OptimalWindow")
OptimalWindow.setWindowTitle('Optimization')
OptimalWindow.setWindowIcon(QIcon(".\image\Icon.jpg"))
OptimalWindow.resize(600, 579)
OptimalWindow.center()
self.title = QLabel(OptimalWindow)
self.title.setGeometry(QRect(0, 0, 600, 78))
self.title.setText("")
self.title.setPixmap(QPixmap(".\OptimalImage\\Optimization.jpg"))
self.Main = QLabel(OptimalWindow)
self.Main.setGeometry(QRect(0, 79, 600, 500))
self.Main.setText("")
self.Main.setPixmap(QPixmap(".\OptimalImage\\Main.png"))
self.ScanInfo = QTextEdit(OptimalWindow)
self.ScanInfo.setGeometry(QRect(40, 109, 500, 400))
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
OptimalWindow = QWidget()
ui = Ui_OptimalWindow()
ui.initUI(OptimalWindow)
OptimalWindow.show()
app.exec_()
耗时的任务冻结了GUI,因此它们必须在另一个线程中运行,并且如果要从辅助线程更新GUI,则应通过信号发送它: