def _init_ui(self): size_lay = QtWidgets.QVBoxLayout() sub_lay1 = QtWidgets.QHBoxLayout() sub_lay1.addWidget( MToolButton().svg("left_line.svg").icon_only().huge()) sub_lay1.addWidget( MToolButton().svg("right_line.svg").icon_only().large()) sub_lay1.addWidget(MToolButton().svg("up_line.svg").icon_only()) sub_lay1.addWidget( MToolButton().svg("up_line.svg").icon_only().small()) sub_lay1.addWidget( MToolButton().svg("down_line.svg").icon_only().tiny()) sub_lay1.addStretch() size_lay.addLayout(sub_lay1) button2 = MToolButton().svg("detail_line.svg").icon_only() button2.setEnabled(False) button7 = MToolButton().svg("trash_line.svg").icon_only() button7.setCheckable(True) state_lay = QtWidgets.QHBoxLayout() state_lay.addWidget(button2) state_lay.addWidget(button7) state_lay.addStretch() button_trash = MToolButton().svg("trash_line.svg").text_beside_icon() button_trash.setText("Delete") button_login = MToolButton().svg("user_line.svg").text_beside_icon() button_login.setText("Login") button_lay = QtWidgets.QHBoxLayout() button_lay.addWidget(button_trash) button_lay.addWidget(button_login) sub_lay2 = QtWidgets.QHBoxLayout() sub_lay2.addWidget(button2) sub_lay2.addWidget(button7) main_lay = QtWidgets.QVBoxLayout() main_lay.addWidget(MDivider("different button_size")) main_lay.addLayout(size_lay) main_lay.addWidget(MDivider("disabled & checkable")) main_lay.addLayout(state_lay) main_lay.addWidget(MDivider("type=normal")) main_lay.addLayout(button_lay) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): size_lay = QVBoxLayout() sub_lay1 = QHBoxLayout() sub_lay1.addWidget(MToolButton().svg('left_line.svg').icon_only()) sub_lay1.addWidget(MToolButton().svg('right_line.svg').icon_only()) sub_lay1.addWidget(MToolButton().svg('up_line.svg').icon_only()) sub_lay1.addWidget(MToolButton().svg('down_line.svg').icon_only()) sub_lay1.addStretch() size_lay.addLayout(sub_lay1) button2 = MToolButton().svg('detail_line.svg').icon_only() button2.setEnabled(False) button7 = MToolButton().svg('trash_line.svg').icon_only() button7.setCheckable(True) state_lay = QHBoxLayout() state_lay.addWidget(button2) state_lay.addWidget(button7) state_lay.addStretch() button_trash = MToolButton().svg('trash_line.svg').text_beside_icon() button_trash.setText('Delete') button_login = MToolButton().svg('user_line.svg').text_beside_icon() button_login.setText('Login') button_lay = QHBoxLayout() button_lay.addWidget(button_trash) button_lay.addWidget(button_login) sub_lay2 = QHBoxLayout() sub_lay2.addWidget(button2) sub_lay2.addWidget(button7) main_lay = QVBoxLayout() main_lay.addWidget(MDivider('different button_size')) main_lay.addLayout(size_lay) main_lay.addWidget(MDivider('disabled & checkable')) main_lay.addLayout(state_lay) main_lay.addWidget(MDivider('type=normal')) main_lay.addLayout(button_lay) main_lay.addStretch() self.setLayout(main_lay)
class CenterWindow(QWidget): """中心窗口类""" load_view_signal = Signal(str, str, str) #加载参数面板的信号 def __init__(self): super(CenterWindow,self).__init__() self.setObjectName("CenterWindow") self.fileList = [] # 保存当前选择标签下的文件列表 self.tag = "" # 保存当前标签 self.tableWidget_show = True # tableWidget窗口是否显示 self.row = 0 # 定位添加标签 self.column = 0 self.setupUI() # 设置tablewidget self.tableWidget = self.ui.findChild(QTableWidget, "tableWidget") self.tableWidget.setMaximumHeight(Data.getWindowHeight()/5) self.setTableWidget() self.tableWidget.setStyleSheet(Data.getQSS()) self.tableWidget.setStyleSheet("background-color: #323232") self.searchWidget = self.ui.findChild(QWidget, "widget_2") self.search_engine_line_edit = MLineEdit().search_engine().large() dayu_theme.apply(self.search_engine_line_edit) self.searchWidget.setLayout(QHBoxLayout()) self.searchWidget.layout().addWidget(self.search_engine_line_edit) self.slider = MSlider(Qt.Horizontal) self.slider.setMaximumWidth(Data.getWindowWidth()/4) self.slider.setValue(50) self.slider.setRange(1, 100) dayu_theme.apply(self.slider) self.searchWidget.layout().addWidget(self.slider) self.button_tag = MToolButton().svg('detail_line.svg').icon_only() self.button_tag.setEnabled(True) self.button_del = MToolButton().svg('trash_line.svg').icon_only() self.button_del.setCheckable(True) dayu_theme.apply(self.button_del) dayu_theme.apply(self.button_tag) self.searchWidget.layout().addWidget(self.button_tag) self.searchWidget.layout().addWidget(self.button_del) self.slider.valueChanged.connect(self.changeBtnSize) self.button_tag.clicked.connect(self.showTableWidget) self.button_del.clicked.connect(self.deleteTag) self.search_engine_line_edit.returnPressed.connect(self.on_searchBtn_click) self.setThread() # 设置UI界面 def setupUI(self): self.setWindowTitle("浏览窗口") self.ui = loadUi(file_path + "\\res\\UI\\CenterWidget.ui") self.ui.setParent(self) self.setLayout(QVBoxLayout()) self.layout().addWidget(self.ui) self.layout().setContentsMargins(0,0,0,0) self.child_widget = self.ui.findChild(QWidget, "widget") # 设置选择窗口 self.widget = SelWidget() layout = QVBoxLayout() self.child_widget.setLayout(layout) self.child_widget.layout().addWidget(self.widget) self.flowLayout = layouitflow.FlowLayout() self.widget.setLayout(self.flowLayout) #瀑布流布局 self.widget.layout().setSpacing(0) #设置间距 # 设置TableWidget def setTableWidget(self): self.tableWidget.setRowCount(5) self.tableWidget.setColumnCount(10) # QHeaderView.setSectionResizeMode(self.tableWidget.horizontalHeader(),QHeaderView.Stretch) # 自适应 # QHeaderView.setSectionResizeMode(self.tableWidget.verticalHeader(),QHeaderView.Stretch) setSectionResizeMode(self.tableWidget.horizontalHeader(),QHeaderView.Stretch) # 自适应 setSectionResizeMode(self.tableWidget.verticalHeader(),QHeaderView.Stretch) self.tableWidget.cellClicked.connect(self.setCenter) #从标签数据库加载数据 colTag = tagdb["tagcol"] try: for x in colTag.find({}, {"Tag": 1}): tag = x["Tag"] self.setTag(tag) except: pass # 获取标签之后设置中心窗口资源 def setCenter(self, row, column): try: #只能打开已经设置标签的 self.addSource(self.tableWidget.item(row, column).text()) except: return # 根据标签从数据库读取文件内容 def addSource(self, tag): # 清除当前窗口的文件列表 self.fileList = [] self.tag = tag #清除原有组件 for i in range(self.widget.layout().count()): self.widget.layout().itemAt(i).widget().deleteLater() collist = tagfiledb.list_collection_names() # 标签文件数据库里集合名列表 for tagx in collist: if tag == tagx: tagfilecolx = tagfiledb[tag] filenamelistx = tagfilecolx.find({}, {"FileName":1}) for x in filenamelistx: filename = x["FileName"] filetype = filename.split(".")[-1] assetdb = client[filetype] collist = assetdb.list_collection_names() # 资产数据库里集合名列表 for file in collist: # 取出资产数据库里单个列表名,即为文件名 assetPathlist = assetdb[file].find({"_id": "Path"}, {"Path": 1}) pathdic = assetPathlist[0] path = pathdic["Path"] if(path.split("/")[-1] == filename): self.addFile(path, filetype, file) self.fileList.append(path) break # 添加按钮 def addFile(self, path, type, name): myBtnWin = btnWin.btnWin(path,type,name) value = (float(self.slider.value()) + 50) / 100 width = height = value * Data.getWindowWidth() / 8 myBtnWin.setMinimumSize(width, height) myBtnWin.setMaximumSize(width, height) myBtnWin.btn_clicked_signal.connect(self.setView) self.widget.layout().addWidget(myBtnWin) # 设置标签 def setTag(self, tag): if(tag.isspace()==False and tag !=""): newItem = QTableWidgetItem(tag) newItem.setTextAlignment(QtCore.Qt.AlignCenter) self.tableWidget.setItem(self.row, self.column, newItem) if (self.column == 9 and self.row == 5): return elif (self.column == 9): self.row += 1 self.column = 0 else: self.column += 1 # 添加标签 def addTag(self, tag): tags = [] for row in range(0, 4): for column in range(0, 9): try: tags.append(self.tableWidget.item(row, column).text()) except: continue if(tag.isspace()==False and tag not in tags and tag !=""): newItem = QTableWidgetItem(tag) newItem.setTextAlignment(QtCore.Qt.AlignCenter) self.tableWidget.setItem(self.row, self.column, newItem) if (self.column == 9 and self.row == 5): return elif (self.column == 9): self.row += 1 self.column = 0 else: self.column += 1 # 滑动Slider,改变按钮大小 def changeBtnSize(self): btnList = self.widget.findChildren(btnWin.btnWin) value = (float(self.slider.value()) + 50) / 100 width = height = value * Data.getWindowWidth() / 8 for btn in btnList: btn.setMinimumSize(width, height) btn.setMaximumSize(width, height) # 设置tableWidget的显示与隐藏 def showTableWidget(self): if (self.tableWidget_show == False): self.tableWidget.setMaximumHeight(Data.getWindowHeight() / 5) self.tableWidget_show = True else: self.tableWidget.setMaximumHeight(0) self.tableWidget_show = False # 搜索按钮按下 def on_searchBtn_click(self): self.search_engine_line_edit.returnPressed.disconnect(self.on_searchBtn_click) #清除原有组件 for i in range(self.widget.layout().count()): self.widget.layout().itemAt(i).widget().deleteLater() import time time.sleep(2) self.thread.start() # 重新根据搜索加载按钮 def endthread(self): #获取输入 search_text = self.search_engine_line_edit.text() # 获取与输入比较的文件名字 matches = [] dir_index = {} # 用于保存文件名和它的对应索引 index = 0 # 文件对应的索引值,用于排序 file_asset = [] typelist = alldoccol.find({}, {"Type":1}) for alltype in typelist: #读取文件类型库里文件类型名 typename = alltype["Type"] assetdb = client[typename] #获得文件类型名对应的资产数据库 collist = assetdb.list_collection_names() #资产数据库里集合名列表 for file in collist: #取出资产数据库里单个列表名,即为文件名 assetcol = assetdb[file] filePathList = assetcol.find({"_id": "Path"}, {"Path": 1}) for filePathTup in filePathList: if "Path" in filePathTup: filePath = filePathTup["Path"] file_asset.append(filePath) for file in self.fileList: name = file.split("/")[-1] matches.append(name) dir_index[name] = index index += 1 # 根据搜索相关性重新排列 ratio = lambda x, y: difflib.SequenceMatcher(None, x, y).ratio() matches = sorted(matches, key=lambda x: ratio(x, search_text), reverse=True) # 按照排列重新添加资源 for name in matches: key = self.fileList[dir_index[name]] filename = os.path.basename(key) type = filename.split(".")[-1] self.addFile(key, type, filename) self.search_engine_line_edit.returnPressed.connect(self.on_searchBtn_click) #设置一个新的线程来显示加载动画 def setThread(self): #防止多次调用线程 self.thread = MFetchDataThread(self) self.thread.started.connect(self.addCircle) self.thread.finished.connect(self.removeCircle) self.thread.finished.connect(self.endthread) def addCircle(self): try: self.win = QWidget() self.win.setMinimumSize(self.child_widget.width()/1.05,self.child_widget.height()/1.1) self.loading_wrapper = MLoading.huge() self.win.setLayout(QHBoxLayout()) self.win.layout().addWidget(self.loading_wrapper) self.widget.layout().addWidget(self.win) except: pass def removeCircle(self): try: self.win.deleteLater() import time time.sleep(2) except: pass def deleteTag(self): username = User.UserPanel.CorrectUserName userID = None if username == None: self.slot_show_message(MMessage.error, (u'请先登陆!')) return 0 else: usercol = userdb[username] userIDlist = usercol.find({"_id": "UserID"}, {"UserID": 1}) for userIDDic in userIDlist: if "UserID" in userIDDic: userID = userIDDic["UserID"] else: userID = None if userID == u"管理员": delDic = {"Tag":self.tag} tagcol.delete_one(delDic) #删除标签库里的该标签 tagfilecol = tagfiledb[self.tag] RTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) filenamelist = tagfilecol.find({}, {"FileName":1}) for filenameDic in filenamelist: if "FileName" in filenameDic: filename = filenameDic["FileName"] type = filename.split(".")[-1] assetdb = client[type] assetcol = assetdb[filename] assetcol.delete_one(delDic) #删除所有含有该标签的文件里的该标签。 dict = {"Time": RTime, "Operation": u"删除标签", "UserName": username} #保存删除记录到资产数据库 assettaglist = assetcol.find({}, {"Tag": 1}) taglist = [] for x in assettaglist: if "Tag" in x: taglist.append(x) if len(taglist) == 0: assetcol.drop() tagfilecol.drop() #删除标签文件库里的该标签集合 dict = {"Time": RTime, "Operation": u"删除标签", "FileName": self.tag} usercol.insert_one(dict) #保存删除记录到用户数据库 self.slot_show_message(MMessage.error, (u'删除成功')) self.resetTableWidget() else: self.slot_show_message(MMessage.error, (u'只有管理员才可以删除标签')) # 弹出信息提示窗口 def slot_show_message(self, func, config): func(config, parent=self) # 按钮点击,发送信号到主窗口 def setView(self, type, name, path): self.load_view_signal.emit(type,name,path) def resetTableWidget(self): tagdb = client["tagdb"] # 标签数据库 tagcol = tagdb["tagcol"] # 标签集合 taglist = tagcol.find({}, {"Tag": 1}) tags = [] for tagdic in taglist: if "Tag" in tagdic: tags.append(tagdic["Tag"]) # 重新设置标签 self.tableWidget.clearContents() self.row, self.column = 0, 0 # 根据标签添加按钮 for tag in tags: self.setTag(tag)