123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- import sys
- import os
- import subprocess
- import pyperclip
- from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout, QMenu, QAction, \
- QLineEdit, QHeaderView
- from PyQt5.QtCore import Qt
- from win import EverythingApi
- class ResultWindow(QWidget):
- def __init__(self, data):
- super().__init__()
- self.title = "搜索结果"
- self.left = 200
- self.top = 200
- self.width = 980
- self.height = 800
- self.data = data
- self.initUI()
- def initUI(self):
- self.setWindowTitle(self.title)
- self.setGeometry(self.left, self.top, self.width, self.height)
- # 创建搜索框
- self.searchInput = QLineEdit(self)
- self.searchInput.setPlaceholderText("Search...")
- self.searchInput.returnPressed.connect(self.searchFiles)
- # 创建表格
- self.createTable()
- # 设置窗口的布局
- layout = QVBoxLayout()
- layout.addWidget(self.searchInput)
- layout.addWidget(self.tableWidget)
- self.setLayout(layout)
- # 显示窗口
- # self.show()
- def createTable(self):
- # 创建一个QTableWidget
- self.tableWidget = QTableWidget()
- # 设置列数
- self.tableWidget.setColumnCount(4)
- self.tableWidget.setHorizontalHeaderLabels(["名称", "路径", "大小", "修改时间"])
- # 添加数据到表格
- self.tableWidget.setRowCount(len(self.data))
- for row_index, row_data in enumerate(self.data):
- self.tableWidget.setItem(row_index, 0, QTableWidgetItem(row_data['file_name']))
- self.tableWidget.setItem(row_index, 1, QTableWidgetItem(row_data['file_path']))
- self.tableWidget.setItem(row_index, 2, QTableWidgetItem(row_data['file_size']))
- self.tableWidget.setItem(row_index, 3, QTableWidgetItem(row_data['modified_time']))
- # 设置列宽比例
- total_width = self.width
- self.tableWidget.setColumnWidth(0, int(total_width * 0.30)) # 30% for File Name
- self.tableWidget.setColumnWidth(1, int(total_width * 0.35)) # 35% for Path
- self.tableWidget.setColumnWidth(2, int(total_width * 0.10)) # 15% for Size
- self.tableWidget.setColumnWidth(3, int(total_width * 0.25)) # 20% for Modified Time
- # 设置列宽为用户可调整
- header = self.tableWidget.horizontalHeader()
- header.setSectionResizeMode(QHeaderView.Interactive)
- header.setSectionResizeMode(3, QHeaderView.Stretch)
- # 允许排序并设置默认不排序
- self.tableWidget.setSortingEnabled(True)
- self.tableWidget.sortByColumn(-1, Qt.AscendingOrder) # 初始化时不排序任何列
- # 为表格添加右键菜单支持
- self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
- self.tableWidget.customContextMenuRequested.connect(self.showContextMenu)
- def showContextMenu(self, pos):
- contextMenu = QMenu(self)
- openFileAction = QAction("打开文件", self)
- openPathAction = QAction("打开文件路径", self)
- copyPathAction = QAction("复制文件路径和名称", self)
- contextMenu.addAction(openFileAction)
- contextMenu.addAction(openPathAction)
- contextMenu.addAction(copyPathAction)
- action = contextMenu.exec_(self.mapToGlobal(pos))
- if action == openFileAction:
- self.openFile()
- elif action == openPathAction:
- self.openPath()
- elif action == copyPathAction:
- self.copyPathAndFilename()
- def openFile(self):
- row = self.tableWidget.currentRow()
- if row >= 0:
- path = os.path.join(self.tableWidget.item(row, 1).text(), self.tableWidget.item(row, 0).text())
- subprocess.Popen(['explorer', path])
- def openPath(self):
- row = self.tableWidget.currentRow()
- if row >= 0:
- path = self.tableWidget.item(row, 1).text()
- subprocess.Popen(['explorer', '/select,', path])
- def copyPathAndFilename(self):
- row = self.tableWidget.currentRow()
- if row >= 0:
- full_path = os.path.join(self.tableWidget.item(row, 1).text(), self.tableWidget.item(row, 0).text())
- pyperclip.copy(full_path)
- def searchFiles(self):
- search_text = self.searchInput.text().strip()
- if search_text: # 确保搜索框不为空
- # 使用Everything API进行搜索
- e_api = EverythingApi.Everything()
- new_data = e_api.searchfile(search_text)
- self.updateTable(new_data)
- def searchIatFiles(self, search_text):
- if search_text: # 确保搜索框不为空
- self.searchInput.setText(search_text)
- # 使用Everything API进行搜索
- e_api = EverythingApi.Everything()
- new_data = e_api.searchfile(search_text)
- self.updateTable(new_data)
- def updateTable(self, data):
- self.tableWidget.setRowCount(len(data))
- for row_index, row_data in enumerate(data):
- self.tableWidget.setItem(row_index, 0, QTableWidgetItem(row_data['file_name']))
- self.tableWidget.setItem(row_index, 1, QTableWidgetItem(row_data['file_path']))
- self.tableWidget.setItem(row_index, 2, QTableWidgetItem(row_data['file_size']))
- self.tableWidget.setItem(row_index, 3, QTableWidgetItem(row_data['modified_time']))
- self.tableWidget.sortByColumn(-1, Qt.AscendingOrder)
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- data = [] # Placeholder for data
- ex = ResultWindow(data)
- ex.show()
- sys.exit(app.exec_())
|