from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import sys # 定义转换字符 _TRAN_TABLE=[ ("checker_dtb","设备树文件"), ("checker_gen1_app","一代批检仪/赋码仪主板程序"), ("checker_gen1_boot","一代批检仪/赋码仪主板boot程序"), ("checker_host_app","自研批检仪/赋码仪主板程序"), ("checker_m4","自研批检仪/赋码仪协处理器程序"), ("checker_slave_app","自研批检仪/赋码仪小板程序"), ("checker_slave_app_can","自研批检仪/赋码仪小板程序CAN总线"), ("checker_slave_app_uart","自研批检仪/赋码仪小板程序串口总线"), ("checker_slave_boot_can","自研批检仪/赋码仪小板boot程序CAN总线"), ("checker_slave_boot_uart","自研批检仪/赋码仪小板boot程序串口总线"), ("coder_stm32f1_app","手动线赋码控制器主板程序"), ("coder_stm32f1_boot","手动线赋码控制器主板boot程序"), ("daemon","自研批检仪/赋码仪守护进程"), ("jqcoder_slave_app","一代赋码仪小板程序"), ("judge","判定脚本"), ("scheme","检测方案"), ("test_data","测试数据"), ] def _tran_(text:str): for i in _TRAN_TABLE: if(i[0]==text): return i[1] return text def _detran_(text:str): for i in _TRAN_TABLE: if(i[1]==text): return i[0] return text # font: 25 9pt "Microsoft YaHei"; class select_list(QObject): style_sheet =""" QListView { font: 25 9pt; border: 15px solid white; border-radius: 10px; show-decoration-selected: 1; } QListView::item { height: 40px; } QListView::item:hover { background-color: transparent; padding: 10px; border-left: 3px solid rgb(130, 130, 130); } QListView::item:selected { background-color: transparent; color: black; padding: 10px; border-left: 3px solid black; } """ def __init__(self,father:QDialog,title:str,str_list:list): QObject.__init__(self) self.w=QDialog(father) self.w.resize(800,400) self.w.setWindowTitle(title) self.w.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.w.setWindowModality(Qt.WindowModality.ApplicationModal) self.file_list = QListWidget(self.w) self.file_list.setObjectName(u"str_list") self.file_list.setGeometry(QRect(20, 20, 760, 360)) self.file_list.setFrameShape(QFrame.Shape.Box) self.file_list.setMidLineWidth(1) self.file_list.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) self.file_list.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) self.file_list.itemDoubleClicked.connect(self.item_clicked) self.file_list.setStyleSheet(self.style_sheet) self.item_append(str_list) def item_append(self,items:list): for i in items: # print("add item",i[0]) self.file_list.addItem(_tran_(i[0])) def item_clicked(self,item:QListWidgetItem ): self.select_item=_detran_(item.text()) self.w.done(QDialog.DialogCode.Accepted) self.w.close() def show(self): # self.w.show() if(self.w.exec()==QDialog.DialogCode.Accepted): # print(self.select_item) return self.select_item return "" class file_list(QDialog): def __init__(self,father:QDialog,title:str,str_list:list): QDialog.__init__(self,father) self.resize(1200,700) self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.setWindowTitle(title) self.code_list=QTableWidget(self) self.code_list.setObjectName(u"code_list") self.code_list.setGeometry(QRect(5, 5, 1190, 690)) self.code_list.setColumnCount(4) self.code_list.setHorizontalHeaderLabels(list(["ID","上传时间","文件名","描述"])) self.code_list.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch) self.code_list.horizontalHeader().setSectionResizeMode(0,QHeaderView.ResizeMode.Fixed) self.code_list.setColumnWidth(0,50) self.code_list.horizontalHeader().setSectionResizeMode(1,QHeaderView.ResizeMode.Fixed) self.code_list.setColumnWidth(1,160) self.code_list.horizontalHeader().setSectionResizeMode(2,QHeaderView.ResizeMode.Fixed) self.code_list.setColumnWidth(2,400) self.code_list.setSelectionBehavior( QAbstractItemView.SelectionBehavior.SelectRows) self.code_list.cellDoubleClicked.connect(self.cell_clicked) self.backcolor=True for i in str_list: self.list_add(i[0]) # 添加数据 def list_add(self,text:str): stat=self.backcolor self.backcolor=not self.backcolor if(stat==True): bkcolor=QColor() bkcolor.setRgb(230,230,230,255) else: bkcolor=QColor() bkcolor.setRgb(255,255,255,255) code_strs=text.split("|") if(len(code_strs)>=4): code_strs[3],line=self.split_line(code_strs[3]) else: code_strs.append("") line=1 RowCont=self.code_list.rowCount() self.code_list.insertRow(RowCont) for i in range(len(code_strs)): self.code_list.setItem(RowCont,i,QTableWidgetItem(code_strs[i])) self.code_list.item(RowCont,i).setBackground(bkcolor) self.code_list.setRowHeight(RowCont,line*30) # self.code_list.resizeRowsToContents() def split_line(self,text:str): s='' line=(len(text)+29)//30 for i in range(line): s+=text[i*30:(i+1)*30] s+='\n' return s.strip(),line def cell_clicked(self,x:int,y:int ): print("cell_clicked",x,y) str_list=[] for i in range(3): str_list.append(self.code_list.item(x,i).text()) self.select_item='|'.join(str_list) self.done(QDialog.DialogCode.Accepted) self.close() def show(self): if(self.exec()==QDialog.DialogCode.Accepted): print(self.select_item) return self.select_item return "" if __name__=='__main__': app = QApplication(sys.argv) l=[ '1|2023-11-01 11:11:00|dddddddd|测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字,测试文字, 测试文字,测试文字,测试文字,', '2|sssssss|dddddddd|sssssssss', '3|sssssss|dddddddd|sssssssss', '4|sssssss|dddddddd|sssssssss', ] dlg=file_list(father=None, title="测试窗口",str_list=l) dlg.show() # app.exec()