Exemple #1
0
    def show_context_menu(self, point):
        item = self.currentItem()

        def key(k):
            sc = unicode_type(QKeySequence(k | Qt.CTRL).toString(QKeySequence.NativeText))
            return ' [%s]'%sc

        if item is not None:
            m = QMenu()
            m.addAction(QIcon(I('edit_input.png')), _('Change the location this entry points to'), self.edit_item)
            m.addAction(QIcon(I('modified.png')), _('Bulk rename all selected items'), self.bulk_rename)
            m.addAction(QIcon(I('trash.png')), _('Remove all selected items'), self.del_items)
            m.addSeparator()
            ci = unicode_type(item.data(0, Qt.DisplayRole) or '')
            p = item.parent() or self.invisibleRootItem()
            idx = p.indexOfChild(item)
            if idx > 0:
                m.addAction(QIcon(I('arrow-up.png')), (_('Move "%s" up')%ci)+key(Qt.Key_Up), self.move_up)
            if idx + 1 < p.childCount():
                m.addAction(QIcon(I('arrow-down.png')), (_('Move "%s" down')%ci)+key(Qt.Key_Down), self.move_down)
            if item.parent() is not None:
                m.addAction(QIcon(I('back.png')), (_('Unindent "%s"')%ci)+key(Qt.Key_Left), self.move_left)
            if idx > 0:
                m.addAction(QIcon(I('forward.png')), (_('Indent "%s"')%ci)+key(Qt.Key_Right), self.move_right)

            m.addSeparator()
            case_menu = QMenu(_('Change case'))
            case_menu.addAction(_('Upper case'), self.upper_case)
            case_menu.addAction(_('Lower case'), self.lower_case)
            case_menu.addAction(_('Swap case'), self.swap_case)
            case_menu.addAction(_('Title case'), self.title_case)
            case_menu.addAction(_('Capitalize'), self.capitalize)
            m.addMenu(case_menu)

            m.exec_(QCursor.pos())
Exemple #2
0
 def workaround_broken_under_mouse(ch):
     import sip
     from PyQt5.Qt import QCursor, QToolButton
     # See https://bugreports.qt-project.org/browse/QTBUG-40233
     if isinstance(ch, QToolButton) and not sip.isdeleted(ch):
         ch.setAttribute(Qt.WA_UnderMouse, ch.rect().contains(ch.mapFromGlobal(QCursor.pos())))
         ch.update()
Exemple #3
0
 def show_context_menu(self, point):
     idx = self.currentIndex()
     if idx and idx.isValid() and not idx.data(Qt.UserRole):
         m = QMenu()
         m.addAction(QIcon(I('view.png')), _('View this cover at full size'), self.show_cover)
         m.addAction(QIcon(I('edit-copy.png')), _('Copy this cover to clipboard'), self.copy_cover)
         m.exec_(QCursor.pos())
Exemple #4
0
 def show_context_menu(self, point):
     idx = self.currentIndex()
     if idx and idx.isValid() and not idx.data(Qt.UserRole):
         m = QMenu()
         m.addAction(QIcon(I('view.png')),
                     _('View this cover at full size'), self.show_cover)
         m.addAction(QIcon(I('edit-copy.png')),
                     _('Copy this cover to clipboard'), self.copy_cover)
         m.exec_(QCursor.pos())
    def createMisAlignment(self, mis_layout, callback):
        controls0 = []
        controls1 = []
        for i in range(3):
            # Translation
            layout0 = QHBoxLayout()
            slider = QFloatSlider(Qt.Horizontal, self)
            slider.setRange(-50.0, 50.0, 101)
            slider.setFloatValue(0.0)
            slider.floatValueChanged.connect(lambda value: QToolTip.showText(
                QCursor.pos(), "%f" % (value), None))
            button = QToolButton()
            act = QAction()
            act.setText("T" + chr(88 + i))
            button.setDefaultAction(act)
            button.clicked.connect(callback)
            layout0.addWidget(slider)
            layout0.addWidget(button)
            controls0.append((slider, button))

            # Rotation
            layout1 = QHBoxLayout()
            slider = QFloatSlider(Qt.Horizontal, self)
            slider.setRange(-90.0, 90.0, 37)
            slider.setFloatValue(0.0)
            slider.floatValueChanged.connect(lambda value: QToolTip.showText(
                QCursor.pos(), "%f" % (value), None))
            button = QToolButton()
            act = QAction()
            act.setText("R" + chr(88 + i))
            button.setDefaultAction(act)
            button.clicked.connect(callback)
            layout1.addWidget(slider)
            layout1.addWidget(button)
            mis_layout.addItem(layout0)
            mis_layout.addItem(layout1)
            controls1.append((slider, button))
        return controls0 + controls1
    def createMovement(self, inLayout, onPressed, onReleased):
        controls0 = []
        controls1 = []

        for i in range(3):
            layout0 = QHBoxLayout()
            slider = QFloatSlider(Qt.Horizontal, self)
            slider.setRange(-50.0, 50.0, 101)
            slider.setFloatValue(0.0)
            slider.floatValueChanged.connect(
                lambda value, slider=slider, i=i: QToolTip.showText(
                    QCursor.pos(), "T" + chr(88 + i) + ": %f" % (value), None))
            slider.sliderPressed.connect(lambda i=i: onPressed(0, i))
            slider.sliderReleased.connect(lambda i=i: onReleased(0, i))
            layout0.addWidget(slider)
            controls0.append(slider)
            label = QLabel("T" + chr(88 + i))
            layout0.addWidget(label)
            inLayout.addItem(layout0)

            layout1 = QHBoxLayout()
            slider = QFloatSlider(Qt.Horizontal, self)
            slider.setRange(-45.0, 45.0, 91)
            slider.setFloatValue(0.0)
            slider.floatValueChanged.connect(
                lambda value, slider=slider, i=i: QToolTip.showText(
                    QCursor.pos(), "R" + chr(88 + i) + ": %f" % (value), None))
            slider.sliderPressed.connect(
                lambda i=i, slider=slider: onPressed(1, i))
            slider.sliderReleased.connect(
                lambda i=i, slider=slider: onReleased(1, i))
            layout1.addWidget(slider)
            label = QLabel("R" + chr(88 + i))
            layout1.addWidget(label)
            controls1.append(slider)
            inLayout.addItem(layout1)

        return controls0, controls1
Exemple #7
0
    def eventFilter(self, qobject, qevent):
        qtype = qevent.type()
        #         print("qtype",qtype)
        #         print("qobject",qobject)
        if qtype == 82:
            counter = len(self.lw_main.selectedIndexes())

            #             右键所在的位置又可能是空白处
            if counter == 1:
                i = self.lw_main.indexAt(QCursor.pos())
                if not i.isValid():
                    print("valid")
                    counter = len(self.lw_main.selectedIndexes())
                else:
                    print("invalid")

#             处理选中的文件
            if counter >= 1:
                action = self.file_menu.exec_(self.file_popup_menu.menu_item,
                                              QCursor.pos())
                if action:
                    file_list = [
                        self.fileSystemModel.itemData(i)[0]
                        for i in self.lw_main.selectedIndexes()
                    ]
                    self.script_manager.run_script(action.text(),
                                                   self.le_path.text(),
                                                   file_list)
#             选中空白处,返回上层目录
            else:
                parent_dir = dirname(self.le_path.text())
                if parent_dir == self.le_path.text() and self.isWindowsOS:
                    pass
                else:
                    self.le_path.setText(parent_dir)
                    self.on_pb_load_path_clicked()
        return False
Exemple #8
0
    def show_context_menu(self, point):
        item = self.currentItem()

        def key(k):
            sc = unicode_type(
                QKeySequence(k | Qt.Modifier.CTRL).toString(
                    QKeySequence.SequenceFormat.NativeText))
            return ' [%s]' % sc

        if item is not None:
            m = QMenu(self)
            m.addAction(QIcon(I('edit_input.png')),
                        _('Change the location this entry points to'),
                        self.edit_item)
            m.addAction(QIcon(I('modified.png')),
                        _('Bulk rename all selected items'), self.bulk_rename)
            m.addAction(QIcon(I('trash.png')), _('Remove all selected items'),
                        self.del_items)
            m.addSeparator()
            ci = unicode_type(item.data(0, Qt.ItemDataRole.DisplayRole) or '')
            p = item.parent() or self.invisibleRootItem()
            idx = p.indexOfChild(item)
            if idx > 0:
                m.addAction(QIcon(I('arrow-up.png')),
                            (_('Move "%s" up') % ci) + key(Qt.Key.Key_Up),
                            self.move_up)
            if idx + 1 < p.childCount():
                m.addAction(QIcon(I('arrow-down.png')),
                            (_('Move "%s" down') % ci) + key(Qt.Key.Key_Down),
                            self.move_down)
            if item.parent() is not None:
                m.addAction(QIcon(I('back.png')),
                            (_('Unindent "%s"') % ci) + key(Qt.Key.Key_Left),
                            self.move_left)
            if idx > 0:
                m.addAction(QIcon(I('forward.png')),
                            (_('Indent "%s"') % ci) + key(Qt.Key.Key_Right),
                            self.move_right)

            m.addSeparator()
            case_menu = QMenu(_('Change case'), m)
            case_menu.addAction(_('Upper case'), self.upper_case)
            case_menu.addAction(_('Lower case'), self.lower_case)
            case_menu.addAction(_('Swap case'), self.swap_case)
            case_menu.addAction(_('Title case'), self.title_case)
            case_menu.addAction(_('Capitalize'), self.capitalize)
            m.addMenu(case_menu)

            m.exec_(QCursor.pos())
Exemple #9
0
    def show_context_menu(self):
        menu = QMenu(self)
        item = self.current_item()

        if not item:
            return

        actions = list()
        file_menu = menu.addMenu(QIcon("res/delete.svg"), "File operations")
        delete_action = QAction(QIcon("res/delete.svg"), "Delete", file_menu)
        actions.append(delete_action)
        file_menu.addActions(actions)
        file_menu.setEnabled(True)
        menu.setEnabled(True)
        action = menu.exec_(QCursor.pos())
Exemple #10
0
 def eventFilter(self, qobject, qevent):
     qtype = qevent.type()
     print(qtype)
     action = None
     if qtype == QEvent.HoverEnter:
         if qobject == self.pb_bold:
             action = self.popMenu.exec_(listActionHandler.bold,
                                         QCursor.pos())
         elif qobject == self.pb_heading:
             action = self.popMenu.exec_(listActionHandler.headdings,
                                         QCursor.pos())
         elif qobject == self.pb_unsort_list:
             action = self.popMenu.exec_(listActionHandler.unsort_lists,
                                         QCursor.pos())
         if action:
             print(action.text())
             listActionHandler.handle_action(action,
                                             self.te_editor.textCursor())
     # ~ elif qtype == QEvent.Leave:
     else:
         pass
         # ~ print("leave")
         # ~ self.popMenu.close()
     return False
    def contextMenuEvent(self, event):
        """ Item右键点击事件 """
        self._rightClickPoint = event.pos()
        item = self.itemAt(self._rightClickPoint)

        self._tableCountAction.setText('行: {0}, 列: {1}'.format(
            self.rowCount(), self.columnCount()))

        if item is None:
            self._markAction.setEnabled(False)
            self._highlightAction.setEnabled(False)

        else:
            itemState = 0  # 0: not marked or highlighted, 1: marked, 2: highlighted

            if self._markedItem is not None and self._markedItem.row(
            ) == item.row():
                itemState = 1
            else:
                for highlightedItem in self._highlightedItems:
                    if highlightedItem[0].row() == item.row():
                        itemState = 2

            if itemState == 0:
                self._markAction.setText('标记')
                self._markAction.setEnabled(True)
                self._highlightAction.setText('高亮')
                self._highlightAction.setEnabled(True)

            elif itemState == 1:
                self._markAction.setText('取消标记')
                self._markAction.setEnabled(True)
                self._highlightAction.setEnabled(False)

            else:
                self._highlightAction.setText('取消高亮')
                self._highlightAction.setEnabled(True)

                self._markAction.setEnabled(False)

        # at last, set visible mark action
        if self._markedItem is not None:
            self._visibleMarkAction.setText('定位标记')
            self._visibleMarkAction.setEnabled(True)
        else:
            self._visibleMarkAction.setEnabled(False)

        self._itemMenu.popup(QCursor.pos())
 def showListContextMenu(self):
     self.listWidget.listContextMenu.move(QCursor.pos())
     self.listWidget.listContextMenu.show()
Exemple #13
0
 def exec(self, x=None, y=None):
     if x is None:
         super(Menu, self).exec(QCursor.pos())
     else:
         super(Menu, self).exec(QPoint(x, y))
Exemple #14
0
 def sample_direction(self,time_):
         if len(self.mouse_positions)>1:
                 self.mouse_positions[time_]=QCursor.pos()
Exemple #15
0
 def showContextMenu(self):
     self.treeWidget.treeContextMenu.move(QCursor.pos())
     self.treeWidget.treeContextMenu.show()
Exemple #16
0
    def contextMenuEvent(self, event):
        """右键点击事件"""

        self._menu.popup(QCursor.pos())
Exemple #17
0
 def sample_pos(self,time_):
         self.mouse_positions[time_]=QCursor.pos()
Exemple #18
0
 def collapse_menu_hovered(self, action):
     tip = action.toolTip()
     if tip == '*':
         tip = ''
     QToolTip.showText(QCursor.pos(), tip)
Exemple #19
0
    def showTaskMenu(self, pos):
        item: QTreeWidgetItem = self.treePlot.itemAt(pos)
        index = self.treePlot.indexAt(pos)
        if not item:
            return
        if not index:
            return

        parent_item = item.parent()

        if parent_item:
            task_item = parent_item
            sub_task_item = item
        else:
            task_item = item
            sub_task_item = None

        task: PlotTask = task_item.data(0, Qt.UserRole)

        if sub_task_item:
            sub_task: PlotSubTask = sub_task_item.data(0, Qt.UserRole)
            working = sub_task.working
        else:
            sub_task: PlotSubTask = task.current_sub_task
            working = task.working

        menu = QMenu(self)

        action_detail = menu.addAction(u"查看日志")
        action_modify = None
        action_delete = None
        action_stop = None
        action_suspend = None
        action_suspend_for_30min = None
        action_suspend_for_1h = None
        action_suspend_for_2h = None
        action_suspend_for_3h = None
        action_suspend_for_4h = None
        action_resume = None
        action_next_stop = None
        action_locate_temp = None
        action_clean_temp = None
        action_increase_number = None
        action_reduce_number = None

        if not sub_task_item and task.count != 1:
            action_detail.setDisabled(True)

        if task.finish:
            if not sub_task_item:
                menu.addSeparator()
                action_delete = menu.addAction(u"删除")
                if not task.success:
                    if os.path.exists(task.temporary_folder):
                        action_clean_temp = menu.addAction(u"清除临时文件")
        elif working:
            if not sub_task_item:
                menu.addSeparator()
                action_modify = menu.addAction(u"编辑")
                menu.addSeparator()

                if task.specify_count:
                    action_increase_number = menu.addAction(u"增加数量")
                    if task.pending_count():
                        action_reduce_number = menu.addAction(u"减少数量")
                else:
                    action_next_stop = menu.addAction(u"下个任务停止")
                    action_next_stop.setCheckable(True)
                    action_next_stop.setChecked(task.next_stop)

            if not sub_task_item or sub_task.working:
                menu.addSeparator()
                if task.delay_remain():
                    action_stop = menu.addAction(u"取消")
                else:
                    action_stop = menu.addAction(u"停止")

                if sub_task.suspend:
                    action_resume = menu.addAction(u"继续")
                else:
                    action_suspend = menu.addAction(u"暂停")
                    menu_suspend_for = menu.addMenu(u"暂停时间")
                    action_suspend_for_30min = menu_suspend_for.addAction(
                        u"30分钟")
                    action_suspend_for_1h = menu_suspend_for.addAction(u"1小时")
                    action_suspend_for_2h = menu_suspend_for.addAction(u"2小时")
                    action_suspend_for_3h = menu_suspend_for.addAction(u"3小时")
                    action_suspend_for_4h = menu_suspend_for.addAction(u"4小时")

        if os.path.exists(
                task.temporary_folder) and platform.system() == 'Windows':
            menu.addSeparator()
            action_locate_temp = menu.addAction(u"浏览临时文件")

        action = menu.exec(QCursor.pos())

        if action is None:
            return

        if action == action_detail:
            self.showTaskOutput(index)
        elif action == action_modify:
            dlg = CreatePlotDialog(task=task)
            if dlg.exec() == dlg.rejected:
                return
            self.task_manager.save_tasks()
        elif action == action_delete:
            all_files, total_size = task.get_temp_files()

            if len(all_files):
                if QMessageBox.information(
                        self, '提示',
                        f"确定要删除临时目录吗?\n{len(all_files)}个文件\n{size_to_str(total_size)}GB",
                        QMessageBox.Ok
                        | QMessageBox.Cancel) == QMessageBox.Cancel:
                    return
            if os.path.exists(
                    task.temporary_folder) and not task.remove_temp_folder():
                QMessageBox.warning(self, '提示', '清除临时目录失败!')
                return

            self.treePlot.takeTopLevelItem(index.row())
            self.task_manager.remove_task(task)
        elif action == action_stop:
            if QMessageBox.information(
                    self, '提示', "确定要停止任务吗?停止后无法恢复",
                    QMessageBox.Ok | QMessageBox.Cancel) == QMessageBox.Cancel:
                return
            if sub_task_item:
                sub_task.worker.stop()
            else:
                for sub in task.sub_tasks:
                    if sub.working:
                        sub.worker.stop()
        elif action == action_suspend:
            if sub_task_item:
                sub_task.worker.suspend()
            else:
                for sub in task.sub_tasks:
                    if sub.working and not sub.worker.copying:
                        sub.worker.suspend()
        elif action == action_suspend_for_30min:
            time_for_suspend = 60 * 30
            if sub_task_item:
                sub_task.worker.suspend(time_for_suspend)
            else:
                for sub in task.sub_tasks:
                    if sub.working and not sub.worker.copying:
                        sub.worker.suspend(time_for_suspend)
        elif action == action_suspend_for_1h:
            time_for_suspend = 60 * 60 * 1
            if sub_task_item:
                sub_task.worker.suspend(time_for_suspend)
            else:
                for sub in task.sub_tasks:
                    if sub.working and not sub.worker.copying:
                        sub.worker.suspend(time_for_suspend)
        elif action == action_suspend_for_2h:
            time_for_suspend = 60 * 60 * 2
            if sub_task_item:
                sub_task.worker.suspend(time_for_suspend)
            else:
                for sub in task.sub_tasks:
                    if sub.working and not sub.worker.copying:
                        sub.worker.suspend(time_for_suspend)
        elif action == action_suspend_for_3h:
            time_for_suspend = 60 * 60 * 3
            if sub_task_item:
                sub_task.worker.suspend(time_for_suspend)
            else:
                for sub in task.sub_tasks:
                    if sub.working and not sub.worker.copying:
                        sub.worker.suspend(time_for_suspend)
        elif action == action_suspend_for_4h:
            time_for_suspend = 60 * 60 * 4
            if sub_task_item:
                sub_task.worker.suspend(time_for_suspend)
            else:
                for sub in task.sub_tasks:
                    if sub.working and not sub.worker.copying:
                        sub.worker.suspend(time_for_suspend)
        elif action == action_resume:
            if sub_task_item:
                sub_task.worker.resume()
            else:
                for sub in task.sub_tasks:
                    if sub.working:
                        sub.worker.resume()
        elif action == action_next_stop:
            task.next_stop = not task.next_stop
        elif action == action_locate_temp:
            folder = task.temporary_folder.replace('/', '\\')
            run('explorer /select, ' + folder)
        elif action == action_clean_temp:
            all_files, total_size = task.get_temp_files()

            if len(all_files) == 0:
                QMessageBox.information(self, '提示', '没有临时文件')
                return
            if QMessageBox.information(
                    self, '提示',
                    f"确定要清除临时文件吗?\n{len(all_files)}个文件\n{size_to_str(total_size)}GB",
                    QMessageBox.Ok | QMessageBox.Cancel) == QMessageBox.Cancel:
                return
            if not task.delete_temp_files():
                QMessageBox.warning(self, '提示', '清除临时文件失败!')
        elif action == action_increase_number:
            sub_task = task.increase()
            if task.count == 2:
                self.addSubTaskItem(item, task.sub_tasks[0])
            self.addSubTaskItem(item, sub_task)
        elif action == action_reduce_number:
            sub_task = task.sub_tasks[-1]
            if sub_task.finish or sub_task.working:
                return
            self.removeSubTaskItem(item, sub_task)
            task.reduce()
            if task.count == 1:
                self.removeSubTaskItem(item, task.sub_tasks[0])

        if not sub_task_item:
            sub_task_item = self.getSubItemFromSubTask(item, sub_task)
        if sub_task_item:
            self.updateSubTaskItem(sub_task_item, sub_task)
    def paintEvent(self, event):
        '''
        @param: event QPaintEvent
        '''
        p = QPainter(self)

        # Just draw separator
        if self._bookmark.isSeparator():
            opt = QStyleOption()
            opt.initFrom(self)
            opt.state |= QStyle.State_Horizontal
            self.style().drawPrimitive(QStyle.PE_IndicatorToolBarSeparator,
                                       opt, p)
            return

        option = QStyleOptionButton()
        self.initStyleOption(option)

        # We are manually drawing the arrow
        option.features &= ~QStyleOptionButton.HasMenu

        # Draw button base (only under mouse, this is autoraise button)
        if self.isDown() or self.hitButton(self.mapFromGlobal(QCursor.pos())):
            option.state |= QStyle.State_AutoRaise | QStyle.State_Raised
            self.style().drawPrimitive(QStyle.PE_PanelButtonTool, option, p,
                                       self)

        if self.isDown():
            shiftX = self.style().pixelMetric(QStyle.PM_ButtonShiftHorizontal,
                                              option, self)
            shiftY = self.style().pixelMetric(QStyle.PM_ButtonShiftVertical,
                                              option, self)
        else:
            shiftX = 0
            shiftY = 0

        height = option.rect.height()
        center = height / 2 + option.rect.top() + shiftY

        iconSize = 16
        iconYPos = center - iconSize / 2

        leftPosition = self.PADDING + shiftX
        rightPosition = option.rect.right() - self.PADDING

        # Draw icon
        if not self._showOnlyText:
            iconRect = QRect(leftPosition, iconYPos, iconSize, iconSize)
            p.drawPixmap(
                QStyle.visualRect(option.direction, option.rect, iconRect),
                self._bookmark.icon().pixmap(iconSize))
            leftPosition = iconRect.right() + self.PADDING

        # Draw menu arrow
        if not self._showOnlyIcon and self.menu():
            arrowSize = 8
            opt = QStyleOption()
            opt.initFrom(self)
            rect = QRect(rightPosition - 8, center - arrowSize / 2, arrowSize,
                         arrowSize)
            opt.rect = QStyle.visualRect(option.direction, option.rect, rect)
            opt.state &= ~QStyle.State_MouseOver
            self.style().drawPrimitive(QStyle.PE_IndicatorArrowDown, opt, p,
                                       self)
            rightPosition = rect.left() - self.PADDING

        # Draw text
        if not self._showOnlyIcon:
            textWidth = rightPosition - leftPosition
            textYPos = center - self.fontMetrics().height() / 2
            txt = self.fontMetrics().elidedText(self._bookmark.title(),
                                                Qt.ElideRight, textWidth)
            textRect = QRect(leftPosition, textYPos, textWidth,
                             self.fontMetrics().height())
            self.style().drawItemText(
                p, QStyle.visualRect(option.direction, option.rect, textRect),
                Qt.TextSingleLine | Qt.AlignCenter, option.palette, True, txt)
Exemple #21
0
	def exec(self, x = None, y = None):
		if x is None:
			super(Menu, self).exec(QCursor.pos())
		else:
			super(Menu, self).exec(QPoint(x, y))
    def contextMenuEvent(self, event):
        """右键点击事件"""

        self._menu.popup(QCursor.pos())
Exemple #23
0
 def collapse_menu_hovered(self, action):
     tip = action.toolTip()
     if tip == '*':
         tip = ''
     QToolTip.showText(QCursor.pos(), tip)
Exemple #24
0
    def on_toolBar_clicked(self, action):
        action_text = action.text()
        if action_text == "收藏夹":
            self.lb_sidebar.setText(action_text)
            self.init_bookmark()
        elif action_text == "标签":
            self.lb_sidebar.setText(action_text)
            self.init_session()
        elif action_text == "菜单":
            action = self.main_menu.exec_(toolbar_menu.menu_item,
                                          QCursor.pos())
            if action:
                self.toolbar_menu.handle_action(action)
        elif action_text == "最近打开的文件":
            self.lb_sidebar.setText(action_text)
            self.lw_sidebar.clear()
            for f in self.last_open_file:
                self.add_sidebar_item(f)
        elif action_text == "主页":
            self.go_home()
        elif action_text == "终端":
            if self.isWindowsOS:
                chdir(self.le_path.text())
                startfile("cmd.exe")
            else:
                system('x-terminal-emulator --working-directory={} &'.format(
                    self.le_path.text()))
        elif action_text == "设备":
            self.lb_sidebar.setText(action_text)
            self.init_drivers()
        elif action_text == "我的电脑":
            if self.isWindowsOS:
                print("explorer.exe '" + self.le_path.text() + "'")
                try:
                    startfile(self.le_path.text())
#                     system("start C:\Users\bkd")
                except Exception as e:
                    print(str(e))
            else:
                system('xdg-open ' + self.le_path.text())
        elif action_text == "返回上层":
            paren_dir = dirname(self.le_path.text())
            self.le_path.setText(paren_dir)
            self.on_pb_load_path_clicked()
        elif action_text == "显示隐藏文件":
            if action.isChecked():
                self.fileFilter_hidden = QDir.Hidden
                self.fileSystemModel.setFilter(self.fileFilter | QDir.Hidden)
            else:
                self.fileFilter_hidden = None
                self.fileSystemModel.setFilter(self.fileFilter)
        elif action_text == "显示文件夹":
            if action.isChecked():
                if self.fileFilter_hidden:
                    self.fileSystemModel.setFilter(QDir.Dirs | QDir.Hidden
                                                   | QDir.NoDot
                                                   | QDir.NoDotDot)
                else:
                    self.fileSystemModel.setFilter(QDir.Dirs | QDir.NoDot
                                                   | QDir.NoDotDot)
            else:
                self.fileSystemModel.setFilter(self.fileFilter)
        elif action_text == "新增":
            if self.lb_sidebar.text() == "收藏夹":
                self.add_sidebar_item(self.le_path.text())
                kdconfig.list_add("global", "bookmark", self.le_path.text())
            elif self.lb_sidebar.text() == "标签":
                self.session_list.add(self.le_path.text())
                self.add_sidebar_item(self.le_path.text())
                print(self.session_list)
        elif action_text == "删除":
            if self.lb_sidebar.text() == "收藏夹":
                print(self.lw_sidebar.currentRow())
                kdconfig.list_del("global", "bookmark", self.le_path.text())
                self.bookmark_list.discard(self.le_path.text())
                self.lw_sidebar.takeItem(self.lw_sidebar.currentRow())
                print(self.bookmark_list)
            elif self.lb_sidebar.text() == "标签":
                self.session_list.remove(self.le_path.text())