Esempio n. 1
0
    def ui(self):
        super(RenamerView, self).ui()

        renamer_widget = QWidget()
        renamer_widget.setLayout(
            layouts.VerticalLayout(spacing=0, margins=(0, 0, 0, 0)))
        renamer_widget.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        self.main_layout.addWidget(renamer_widget)

        rename_layout = layouts.HorizontalLayout(spacing=2,
                                                 margins=(0, 0, 0, 0))
        rename_layout.setAlignment(Qt.AlignLeft)
        renamer_widget.layout().addLayout(rename_layout)

        self._base_name_cbx = checkbox.BaseCheckBox(parent=self)
        rename_layout.addWidget(self._base_name_cbx)
        self._renamer_line = lineedit.BaseLineEdit(parent=self)
        self._renamer_line.setPlaceholderText('New Name')

        rename_layout.addWidget(self._renamer_line)
        reg_ex = QRegExp("^(?!^_)[a-zA-Z_]+")
        text_validator = QRegExpValidator(reg_ex, self._renamer_line)
        self._renamer_line.setValidator(text_validator)
        self._renamer_btn = buttons.BaseButton(parent=self)
        self._renamer_btn.setIcon(resources.icon('rename'))
        rename_layout.addWidget(self._renamer_btn)
Esempio n. 2
0
    def ui(self):
        super(ManualJointOrientView, self).ui()

        manual_joint_ori_layout = layouts.HorizontalLayout()
        self._manual_joint_ori_x_spin = spinbox.DoubleSpinBoxAxis(axis='x',
                                                                  min=-360,
                                                                  max=360,
                                                                  parent=self)
        self._manual_joint_ori_y_spin = spinbox.DoubleSpinBoxAxis(axis='y',
                                                                  min=-360,
                                                                  max=360,
                                                                  parent=self)
        self._manual_joint_ori_z_spin = spinbox.DoubleSpinBoxAxis(axis='z',
                                                                  min=-360,
                                                                  max=360,
                                                                  parent=self)
        self._manual_joint_ori_x_spin.setDecimals(3)
        self._manual_joint_ori_y_spin.setDecimals(3)
        self._manual_joint_ori_z_spin.setDecimals(3)
        self._manual_joint_ori_reset_btn = buttons.BaseButton('Reset',
                                                              parent=self)
        self._manual_joint_ori_reset_btn.setIcon(resources.icon('reset'))
        manual_joint_ori_layout.addWidget(self._manual_joint_ori_x_spin)
        manual_joint_ori_layout.addWidget(self._manual_joint_ori_y_spin)
        manual_joint_ori_layout.addWidget(self._manual_joint_ori_z_spin)
        manual_joint_ori_layout.addWidget(self._manual_joint_ori_reset_btn)

        manual_joint_splitter_layout = layouts.HorizontalLayout()
        manual_joint_splitter_layout.addStretch()
        self._degrees_checks = list()
        for degree in self._model.available_degrees:
            degree_radio = buttons.BaseRadioButton(str(degree), parent=self)
            manual_joint_splitter_layout.addWidget(degree_radio)
            self._degrees_checks.append(degree_radio)
        manual_joint_splitter_layout.addStretch()

        manual_joint_ori_buttons_layout = layouts.HorizontalLayout(
            spacing=5, margins=(2, 2, 2, 2))
        self._manual_joint_ori_add_btn = buttons.BaseButton('Add', parent=self)
        self._manual_joint_ori_subtract_btn = buttons.BaseButton('Subract',
                                                                 parent=self)
        self._manual_joint_ori_set_btn = buttons.BaseButton('Set', parent=self)
        self._manual_joint_ori_set_cbx = checkbox.BaseCheckBox(
            'Affect children', parent=self)
        self._manual_joint_ori_add_btn.setIcon(resources.icon('add'))
        self._manual_joint_ori_subtract_btn.setIcon(resources.icon('minus'))
        self._manual_joint_ori_set_btn.setIcon(resources.icon('equals'))
        manual_joint_ori_buttons_layout.addWidget(
            self._manual_joint_ori_add_btn)
        manual_joint_ori_buttons_layout.addWidget(
            self._manual_joint_ori_subtract_btn)
        manual_joint_ori_buttons_layout.addWidget(
            self._manual_joint_ori_set_btn)
        manual_joint_ori_buttons_layout.addWidget(
            self._manual_joint_ori_set_cbx)

        set_rot_axis_widget = QWidget()
        set_rot_axis_widget.setLayout(layouts.VerticalLayout())
        set_rot_axis_widget.setSizePolicy(QSizePolicy.Minimum,
                                          QSizePolicy.Fixed)
        set_rot_axis_widget.layout().setContentsMargins(5, 5, 5, 5)
        set_rot_axis_widget.layout().setSpacing(10)

        self.main_layout.addLayout(manual_joint_splitter_layout)
        self.main_layout.addLayout(manual_joint_ori_layout)
        self.main_layout.addWidget(dividers.Divider())
        self.main_layout.addLayout(manual_joint_ori_buttons_layout)
        self.main_layout.addWidget(set_rot_axis_widget)
Esempio n. 3
0
    def ui(self):
        super(InterpolatorWidget, self).ui()

        self.setFixedHeight(self.INTERP_HEIGHT)

        main_frame = base.BaseFrame(parent=self)
        main_frame.setFixedHeight(self.INTERP_HEIGHT)
        self.main_layout.addWidget(main_frame)

        main_widget = QWidget()
        main_widget.setLayout(
            layouts.VerticalLayout(spacing=5, margins=(5, 5, 5, 5)))
        main_widget.setFixedHeight(150)
        main_widget.setFixedWidth(400)
        graphics_scene = QGraphicsScene()
        graphics_view = QGraphicsView()
        graphics_view.setScene(graphics_scene)
        graphics_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        graphics_view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        graphics_view.setFocusPolicy(Qt.NoFocus)
        graphics_view.setStyleSheet('QGraphicsView {border-style: none;}')
        graphics_view.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        main_frame.main_layout.addWidget(graphics_view)
        self._main_widget_proxy = graphics_scene.addWidget(main_widget)
        main_widget.setParent(graphics_view)

        title_layout = layouts.HorizontalLayout()
        select_layout = layouts.HorizontalLayout()
        button_layout = layouts.HorizontalLayout()
        slider_layout = layouts.HorizontalLayout()
        check_layout = layouts.HorizontalLayout()

        self._title_line = lineedit.BaseLineEdit(parent=self)
        self._close_btn = buttons.CloseButton('X', parent=self)
        title_layout.addWidget(self._title_line)
        title_layout.addWidget(self._close_btn)

        self._store_items_btn = buttons.BaseButton('Store Items', parent=self)
        self._clear_items_btn = buttons.BaseButton('Clear Items', parent=self)
        select_layout.addStretch()
        select_layout.addWidget(self._store_items_btn)
        select_layout.addWidget(self._clear_items_btn)
        select_layout.addStretch()

        self._store_start_btn = buttons.BaseButton('Store Start', parent=self)
        self._reset_item_btn = buttons.BaseButton('Reset', parent=self)
        self._store_end_btn = buttons.BaseButton('Store End', parent=self)
        button_layout.addWidget(self._store_start_btn)
        button_layout.addWidget(self._reset_item_btn)
        button_layout.addWidget(self._store_end_btn)

        self._start_label = label.BaseLabel('Start', parent=self)
        self._slider = sliders.BaseSlider(parent=self)
        self._slider.setRange(0, 49)
        self._slider.setOrientation(Qt.Horizontal)
        self._end_label = label.BaseLabel('End', parent=self)
        slider_layout.addWidget(self._start_label)
        slider_layout.addWidget(self._slider)
        slider_layout.addWidget(self._end_label)

        self._transforms_cbx = checkbox.BaseCheckBox('Transform', parent=self)
        self._user_attributes_cbx = checkbox.BaseCheckBox('UD Attributes',
                                                          parent=self)
        check_layout.addStretch()
        check_layout.addWidget(self._transforms_cbx)
        check_layout.addWidget(self._user_attributes_cbx)
        check_layout.addStretch()

        main_widget.layout().addLayout(title_layout)
        main_widget.layout().addLayout(select_layout)
        main_widget.layout().addLayout(button_layout)
        main_widget.layout().addLayout(slider_layout)
        main_widget.layout().addLayout(check_layout)
Esempio n. 4
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)