#!/usr/bin/env python3 # 使用系统默认的 python3 运行 ################################################################################################################# # 作者:gfdgd xi # 版本:2.5.0 # 更新时间:2022年11月20日 # 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 # 基于 Python3 的 PyQt5 构建 ################################################################################################################# ################# # 引入所需的库 ################# import os import sys import traceback import updatekiller import PyQt5.QtGui as QtGui import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets desktopList = [] desktopUsrList = [] def GetDesktopList(path): for i in os.listdir(path): if os.path.isdir(f"{path}/{i}"): GetDesktopList(f"{path}/{i}") if os.path.isfile(f"{path}/{i}"): try: desktop = {} with open(f"{path}/{i}") as file: things = file.read() for k in things.splitlines(): if not "=" in k: continue desktop[k[:k.index("=")].lower()] = k[k.index("=") + 1:] desktopList.append([desktop["Name".lower()], desktop["Icon".lower()], desktop["Exec".lower()], f"{path}/{i}"]) except: traceback.print_exc() delButton.setEnabled(len(desktopList)) class DesktopList(QtCore.QThread): show = QtCore.pyqtSignal(int) def __init__(self) -> None: super().__init__() def run(self): if os.path.exists(f"{homePath}/.local/share/applications"): GetDesktopList(f"{homePath}/.local/share/applications") self.show.emit(0) def ShowDesktop(temp): nmodel = QtGui.QStandardItemModel(window) if not len(desktopList): item = QtGui.QStandardItem("无") nmodel.appendRow(item) y = 0 for i in desktopList: #item = QtGui.QStandardItem(QtGui.QIcon(i[1]), i[0]) #nmodel.appendRow(item) if os.path.exists(i[1]): nmodel.setItem(y, 0, QtGui.QStandardItem(QtGui.QIcon(i[1]), i[0])) else: nmodel.setItem(y, 0, QtGui.QStandardItem(QtGui.QIcon.fromTheme(i[1]), i[0])) nmodel.setItem(y, 1, QtGui.QStandardItem(i[2])) nmodel.setItem(y, 2, QtGui.QStandardItem(i[3])) y += 1 nmodel.setHeaderData(0, QtCore.Qt.Horizontal, "程序名") nmodel.setHeaderData(1, QtCore.Qt.Horizontal, "运行路径") nmodel.setHeaderData(2, QtCore.Qt.Horizontal, ".desktop 文件所在路径") nmodel.setColumnCount(3) desktopListView.setModel(nmodel) def GetDesktopThread(): global desktop desktop = DesktopList() desktop.show.connect(ShowDesktop) desktop.start() def DeleteButton(): index = desktopListView.currentIndex().row() if index < 0: QtWidgets.QMessageBox.critical(window, "错误", "未选中任何项") return print(index) print(desktopList[index][3]) #desktopListView.rowMoved(index) #desktopListView.removeRow(index) try: os.remove(desktopList[index][3]) del desktopList[index] ShowDesktop(0) except: traceback.print_exc() QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string homePath = os.getenv("HOME") iconPath = "{}/deepin-wine-runner.svg".format(programPath) #GetDesktopList(f"{homePath}/.local/share/applications") #print(desktopList) app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QMainWindow() widget = QtWidgets.QWidget() layout = QtWidgets.QGridLayout() delButton = QtWidgets.QPushButton("删除指定图标") delButton.clicked.connect(DeleteButton) #desktopListView = QtWidgets.QListView() desktopListView = QtWidgets.QTableView() desktopListView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) desktopListView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)#(QAbstractItemView::SelectRows) layout.addWidget(desktopListView, 0, 0, 1, 4) layout.addWidget(delButton, 1, 3, 1, 1) widget.setLayout(layout) window.setCentralWidget(widget) window.setWindowTitle("图标管理") window.resize(int(window.frameGeometry().width() * 1.5), int(window.frameGeometry().height() * 1.2)) window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) window.show() GetDesktopThread() app.exec_()