import os import threading from PySide2.QtWidgets import * from PySide2.QtCore import * from PySide2.QtGui import * from ui.ui_Analyze import Ui_AnalyzeWindow from ui.AddFile import AddFileWindow,AddPathWindow,FileCategory,FolderCategory import GuiType class AnalyzeWindow(Ui_AnalyzeWindow, QDialog): def __init__(self, mainWindow, shell_execute) -> None: super().__init__() self.add_file_win = None self.setupUi(self) self.init_tableWidget() self.bnt_AddFile.clicked.connect(self.add_file_windows) self.bnt_AddPath.clicked.connect(self.add_path_windows) self.bnt_Remove.clicked.connect(lambda: self.tableWidget.removeRow(self.tableWidget.currentRow())) self.bnt_RemoveAll.clicked.connect(self.remove_all) self.btn_OK.clicked.connect(self.click_ok) self.btn_Apply.clicked.connect(self.apply) self.GUI_shell_execute = shell_execute self.tableWidget.mousePressEvent = self.click_table_widget self.move(mainWindow.x()+(mainWindow.width()-self.width())/2,mainWindow.y()+(mainWindow.height()-self.height())/2) self.show() def init_tableWidget(self): self.tableWidget.itemSelectionChanged.connect(self.itemSelectionChanged) self.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) self.tableWidget.horizontalHeader().setSectionResizeMode(1,QHeaderView.Stretch) fontMetrics = QFontMetrics(self.tableWidget.font()) textWidth = fontMetrics.width(FileCategory.SystemVerilog_2012.text) self.tableWidget.setColumnWidth(0, textWidth+30) def add_file_windows(self): add_file_win = AddFileWindow(self, os.getcwd()) add_file_win.add_file_sig.connect(self.add_file) add_file_win.exec_() def add_path_windows(self): add_path_win = AddPathWindow(self, os.getcwd()) add_path_win.add_file_sig.connect(self.add_path) add_path_win.exec_() def click_table_widget(self, event:QMouseEvent): p = event.pos() index = self.tableWidget.indexAt(p) if index.row() == -1: self.tableWidget.clearSelection() else: QTableWidget.mousePressEvent(self.tableWidget, event) def itemClicked(self): print("itemClicked") def clicked(self): print("clicked") def itemSelectionChanged(self): if self.tableWidget.selectedItems(): self.bnt_Remove.setEnabled(True) else: self.bnt_Remove.setEnabled(False) def add_file(self, text, path): row = self.tableWidget.rowCount() self.tableWidget.insertRow(row) comBox = QComboBox() comBox.addItems(FileCategory.get_all_text()) comBox.setCurrentText(text) self.tableWidget.setCellWidget(row,0,comBox) self.tableWidget.setItem(row,1, QTableWidgetItem(path)) def add_path(self, text, path): row = self.tableWidget.rowCount() self.tableWidget.insertRow(row) self.tableWidget.setItem(row,0, QTableWidgetItem(text)) self.tableWidget.setItem(row,1, QTableWidgetItem(path)) def remove_all(self): row_count = self.tableWidget.rowCount() for _ in range(row_count): self.tableWidget.removeRow(0) def get_all_path(self): dat = [] for i in range(self.tableWidget.rowCount()): file_category_widget:QComboBox = self.tableWidget.cellWidget(i, 0) # 下拉控件单元格 if file_category_widget: file_category_text = file_category_widget.currentText() category_simple = FileCategory.get_category(file_category_text).simple # 纯文本单元格,Search Path else: # file_category = self.tableWidget.item(i, 0).text() category_simple = FolderCategory.Search_Path.simple file_path = self.tableWidget.item(i, 1).text() dat.append([category_simple, file_path]) return dat def apply(self): args = self.get_all_path() try: thread = threading.Thread(target=self.GUI_shell_execute, args=(f"_GUI.Analyze({args})",)) thread.start() except Exception as e: print(e) def click_ok(self): self.apply() self.close()