Exemplo n.º 1
0
    def _init_ui(self):
        self.register_field('percent', 20)
        main_lay = QVBoxLayout()
        main_lay.addWidget(MDivider('different orientation'))
        for orn in [Qt.Horizontal, Qt.Vertical]:
            line_edit_hor = MSlider(orn)
            line_edit_hor.setRange(1, 100)
            self.bind('percent', line_edit_hor, 'value')
            lay = QVBoxLayout()
            lay.addWidget(line_edit_hor)
            main_lay.addLayout(lay)
        spin_box = MSpinBox()
        spin_box.setRange(1, 100)
        self.bind('percent', spin_box, 'value', signal='valueChanged')

        lay3 = QHBoxLayout()
        button_grp = MPushButtonGroup()
        button_grp.set_button_list([
            {
                'text': '+',
                'clicked': functools.partial(self.slot_change_value, 10)
            },
            {
                'text': '-',
                'clicked': functools.partial(self.slot_change_value, -10)
            },
        ])
        lay3.addWidget(spin_box)
        lay3.addWidget(button_grp)
        lay3.addStretch()
        main_lay.addWidget(MDivider('data bind'))
        main_lay.addLayout(lay3)
        main_lay.addStretch()
        self.setLayout(main_lay)
Exemplo n.º 2
0
    def _init_ui(self):
        self.register_field("percent", 20)
        main_lay = QtWidgets.QVBoxLayout()
        main_lay.addWidget(MDivider("different orientation"))
        for orn in [QtCore.Qt.Horizontal, QtCore.Qt.Vertical]:
            line_edit_hor = MSlider(orn)
            line_edit_hor.setRange(1, 100)
            self.bind("percent", line_edit_hor, "value")
            lay = QtWidgets.QVBoxLayout()
            lay.addWidget(line_edit_hor)
            main_lay.addLayout(lay)
        spin_box = MSpinBox()
        spin_box.setRange(1, 100)
        self.bind("percent", spin_box, "value", signal="valueChanged")

        lay3 = QtWidgets.QHBoxLayout()
        button_grp = MPushButtonGroup()
        button_grp.set_button_list(
            [
                {"text": "+", "clicked": functools.partial(self.slot_change_value, 10)},
                {
                    "text": "-",
                    "clicked": functools.partial(self.slot_change_value, -10),
                },
            ]
        )
        lay3.addWidget(spin_box)
        lay3.addWidget(button_grp)
        lay3.addStretch()
        main_lay.addWidget(MDivider("data bind"))
        main_lay.addLayout(lay3)
        main_lay.addStretch()
        self.setLayout(main_lay)
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    def _init_ui(self):
        form_lay = QtWidgets.QFormLayout()
        form_lay.setLabelAlignment(QtCore.Qt.AlignRight)
        gender_grp = MRadioButtonGroup()
        gender_grp.set_button_list([
            {
                "text": "Female",
                "icon": MIcon("female.svg")
            },
            {
                "text": "Male",
                "icon": MIcon("male.svg")
            },
        ])

        country_combo_box = MComboBox().small()
        country_combo_box.addItems(["China", "France", "Japan", "US"])
        date_edit = MDateEdit().small()
        date_edit.setCalendarPopup(True)

        form_lay.addRow("Name:", MLineEdit().small())
        form_lay.addRow("Gender:", gender_grp)
        form_lay.addRow("Age:", MSpinBox().small())
        form_lay.addRow("Password:"******"Country:", country_combo_box)
        form_lay.addRow("Birthday:", date_edit)
        switch = MSwitch()
        switch.setChecked(True)
        form_lay.addRow("Switch:", switch)
        slider = MSlider()
        slider.setValue(30)
        form_lay.addRow("Slider:", slider)

        button_lay = QtWidgets.QHBoxLayout()
        button_lay.addStretch()
        button_lay.addWidget(MPushButton(text="Submit").primary())
        button_lay.addWidget(MPushButton(text="Cancel"))

        main_lay = QtWidgets.QVBoxLayout()
        main_lay.addLayout(form_lay)
        main_lay.addWidget(MCheckBox("I accept the terms and conditions"))
        main_lay.addStretch()
        main_lay.addWidget(MDivider())
        main_lay.addLayout(button_lay)
        self.setLayout(main_lay)
Exemplo n.º 5
0
def test_slider_init(qtbot, orient):
    """Test MSlider init"""
    slider = MSlider(orientation=orient)
    slider.setValue(10)
    qtbot.addWidget(slider)
    slider.show()

    assert slider.value() == 10
Exemplo n.º 6
0
    def _init_ui(self):
        form_lay = QFormLayout()
        form_lay.setLabelAlignment(Qt.AlignRight)
        gender_grp = MRadioButtonGroup()
        gender_grp.set_button_list([{
            'text': 'Female',
            'icon': MIcon('female.svg')
        }, {
            'text': 'Male',
            'icon': MIcon('male.svg')
        }])

        country_combo_box = MComboBox().small()
        country_combo_box.addItems(['China', 'France', 'Japan', 'US'])
        date_edit = MDateEdit().small()
        date_edit.setCalendarPopup(True)

        form_lay.addRow('Name:', MLineEdit().small())
        form_lay.addRow('Gender:', gender_grp)
        form_lay.addRow('Age:', MSpinBox().small())
        form_lay.addRow('Password:'******'Country:', country_combo_box)
        form_lay.addRow('Birthday:', date_edit)
        switch = MSwitch()
        switch.setChecked(True)
        form_lay.addRow('Switch:', switch)
        slider = MSlider()
        slider.setValue(30)
        form_lay.addRow('Slider:', slider)

        button_lay = QHBoxLayout()
        button_lay.addStretch()
        button_lay.addWidget(MPushButton(text='Submit').primary())
        button_lay.addWidget(MPushButton(text='Cancel'))

        main_lay = QVBoxLayout()
        main_lay.addLayout(form_lay)
        main_lay.addWidget(MCheckBox('I accept the terms and conditions'))
        main_lay.addStretch()
        main_lay.addWidget(MDivider())
        main_lay.addLayout(button_lay)
        self.setLayout(main_lay)
Exemplo n.º 7
0
    def _init_ui(self):
        switch = MSwitch()
        switch.setChecked(True)
        slider = MSlider()
        slider.setRange(1, 10)
        switch_lay = QtWidgets.QFormLayout()
        switch_lay.addRow(MLabel("AutoPlay"), switch)
        switch_lay.addRow(MLabel("Interval"), slider)
        test = MCarousel(
            [
                MPixmap("app-{}.png".format(a))
                for a in ["maya", "nuke", "houdini"]
            ],
            width=300,
            height=300,
            autoplay=True,
        )
        switch.toggled.connect(test.set_autoplay)
        slider.valueChanged.connect(lambda x: test.set_interval(x * 1000))
        slider.setValue(3)

        main_lay = QtWidgets.QVBoxLayout()
        main_lay.addWidget(test)
        main_lay.addLayout(switch_lay)
        main_lay.addStretch()
        self.setLayout(main_lay)
Exemplo n.º 8
0
    def __init__(self, imgPath):
        super(headProfieWindow, self).__init__()
        # 加载ui,并设置ui界面
        #self.ui = loadUi(file_path + r"\res\UI\HeadProfileWindow.ui")
        self.setWindowModality(Qt.ApplicationModal)
        self.setWindowTitle(u"头像编辑器")

        # self.ui = loadUi(file_path + r"\res\UI\HeadProfileWindow.ui")

        # self.ui.setParent(self)

        self.imgPath = imgPath
        self.setLayout(QVBoxLayout())
        self.label_view = MLabel()
        self.label_view.setAlignment(Qt.AlignCenter)
        self.layout().addWidget(self.label_view)

        self.layout().addWidget(MDivider(u'缩放'))
        self.hSlider_scale = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_scale)

        self.layout().addWidget(MDivider(u'垂直位移'))
        self.hSlider_moveH = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_moveH)

        self.layout().addWidget(MDivider(u'水平位移'))
        self.hSlider_moveV = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_moveV)
        self.layout().addStretch()

        self.btn_save_image = MPushButton(u'保存图片').large().primary()
        self.layout().addWidget(self.btn_save_image)

        dayu_theme.apply(self)
        self.setMinimumSize(Data.getWindowWidth() / 4.5,
                            Data.getWindowHeight() / 1.7)
        self.setMaximumSize(Data.getWindowWidth() / 4.5,
                            Data.getWindowHeight() / 1.7)
        self.layout().setContentsMargins(20, 40, 20, 40)
        Data.setWindowCenter(self)

        self.hSlider_scale.setRange(0, 100)
        self.hSlider_moveH.setRange(0, 100)
        self.hSlider_moveV.setRange(0, 100)
        self.hSlider_scale.setValue(0)  #初始值
        self.hSlider_moveH.setValue(50)
        self.hSlider_moveV.setValue(50)

        #原图大小
        img = cv2.imread(self.imgPath)
        self.oiX = img.shape[0]
        self.oiY = img.shape[1]

        #获取初始值
        self.scale = self.hSlider_scale.value()
        self.mh = self.hSlider_moveH.value()
        self.mv = self.hSlider_moveV.value()

        #设置初始头像
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

        # #链接信号与槽
        self.hSlider_scale.valueChanged.connect(lambda: self.scaleEdit())
        self.hSlider_moveH.valueChanged.connect(lambda: self.moveHEdit())
        self.hSlider_moveV.valueChanged.connect(lambda: self.moveVEdit())
        self.btn_save_image.clicked.connect(lambda: self.ok())
Exemplo n.º 9
0
class headProfieWindow(QWidget):
    """
    头像编辑窗口
    """
    hPOK_signal = QtCore.Signal()  #确认头像信号

    def __init__(self, imgPath):
        super(headProfieWindow, self).__init__()
        # 加载ui,并设置ui界面
        #self.ui = loadUi(file_path + r"\res\UI\HeadProfileWindow.ui")
        self.setWindowModality(Qt.ApplicationModal)
        self.setWindowTitle(u"头像编辑器")

        # self.ui = loadUi(file_path + r"\res\UI\HeadProfileWindow.ui")

        # self.ui.setParent(self)

        self.imgPath = imgPath
        self.setLayout(QVBoxLayout())
        self.label_view = MLabel()
        self.label_view.setAlignment(Qt.AlignCenter)
        self.layout().addWidget(self.label_view)

        self.layout().addWidget(MDivider(u'缩放'))
        self.hSlider_scale = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_scale)

        self.layout().addWidget(MDivider(u'垂直位移'))
        self.hSlider_moveH = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_moveH)

        self.layout().addWidget(MDivider(u'水平位移'))
        self.hSlider_moveV = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_moveV)
        self.layout().addStretch()

        self.btn_save_image = MPushButton(u'保存图片').large().primary()
        self.layout().addWidget(self.btn_save_image)

        dayu_theme.apply(self)
        self.setMinimumSize(Data.getWindowWidth() / 4.5,
                            Data.getWindowHeight() / 1.7)
        self.setMaximumSize(Data.getWindowWidth() / 4.5,
                            Data.getWindowHeight() / 1.7)
        self.layout().setContentsMargins(20, 40, 20, 40)
        Data.setWindowCenter(self)

        self.hSlider_scale.setRange(0, 100)
        self.hSlider_moveH.setRange(0, 100)
        self.hSlider_moveV.setRange(0, 100)
        self.hSlider_scale.setValue(0)  #初始值
        self.hSlider_moveH.setValue(50)
        self.hSlider_moveV.setValue(50)

        #原图大小
        img = cv2.imread(self.imgPath)
        self.oiX = img.shape[0]
        self.oiY = img.shape[1]

        #获取初始值
        self.scale = self.hSlider_scale.value()
        self.mh = self.hSlider_moveH.value()
        self.mv = self.hSlider_moveV.value()

        #设置初始头像
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

        # #链接信号与槽
        self.hSlider_scale.valueChanged.connect(lambda: self.scaleEdit())
        self.hSlider_moveH.valueChanged.connect(lambda: self.moveHEdit())
        self.hSlider_moveV.valueChanged.connect(lambda: self.moveVEdit())
        self.btn_save_image.clicked.connect(lambda: self.ok())

    def editPicture(self, sn, mhn, mvn):

        img = cv2.imread(self.imgPath)  #每一次都是用原图编辑
        flag = min(img.shape[0], img.shape[1])

        sx = (flag - 150) * 0.01 * sn  #缩放的变化量
        hn = (img.shape[0] - 150) * 0.01 * (mhn - 50) * 0.01 * sn  #水平移动变化量
        vn = (img.shape[1] - 150) * 0.01 * (mvn - 50) * 0.01 * sn  #垂直移动变化量

        if (((img.shape[0] - flag) + sx + hn) // 2) < 0 or ((
            (img.shape[1] - flag) + sx) // 2) < 0:
            newimg = img[(int((img.shape[0] - flag) + sx) //
                          2):(int((img.shape[0] + flag) - sx) // 2),
                         (int((img.shape[1] - flag) + sx) //
                          2):(int((img.shape[1] + flag) - sx) // 2)]
        else:
            newimg = img[(int((img.shape[0] - flag) + sx + hn) //
                          2):(int((img.shape[0] + flag) - sx + hn) // 2),
                         (int((img.shape[1] - flag) + sx + vn) //
                          2):(int((img.shape[1] + flag) - sx + vn) // 2)]

        # newimg = img[(int((img.shape[0] - flag) + sx) // 2): (int((img.shape[0] + flag) - sx) // 2),
        #          (int((img.shape[1] - flag) + sx) // 2):(int((img.shape[1] + flag) - sx) // 2)]

        newimg = cv2.resize(newimg, (150, 150), interpolation=cv2.INTER_AREA)
        cv2.imwrite(hpPath + "\\" + "buffer.jpg", newimg)  # 将图片作为缓存存入指定文件内

    def setPicteruView(self):
        imgPath = hpPath + "\\" + "buffer.jpg"
        pixmap = QtGui.QPixmap(imgPath)
        self.label_view.setPixmap(pixmap)

    def scaleEdit(self):
        self.scale = self.hSlider_scale.value()
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

    def moveHEdit(self):
        self.mh = self.hSlider_moveH.value()
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

    def moveVEdit(self):
        self.mv = self.hSlider_moveV.value()
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

    def ok(self):
        self.hPOK_signal.emit()
        self.close()
Exemplo n.º 10
0
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)