Ejemplo n.º 1
0
    def slot_clicked(self, control):
        if control.objectName() == r'pushButton_src':
            self.data['path_src'] = QtWidgets.QFileDialog.getExistingDirectory(
                self, "选取源文件夹", self.data['path_src'])  # 起始路径
            # print(self.data['path_src'])
            self.flush()

        elif control.objectName() == r'pushButton_dec':
            self.data['path_dec'] = QtWidgets.QFileDialog.getExistingDirectory(
                self, "选取保存文件夹", self.data['path_dec'])  # 起始路径
            # print(self.data['path_dec'])
            self.label_path_dec.setText(
                '%s    %d个' % (Utils.getSubStr(self.data['path_dec']), 0))
            self.listWidget_dec_files.clear()

        elif control.objectName() == r'pushButton_flush':
            self.flush()
        else:
            reply = QtWidgets.QMessageBox.question(self, '警告',
                                                   '改名过程不可逆,\n你确认要更改吗?',
                                                   QtWidgets.QMessageBox.Yes,
                                                   QtWidgets.QMessageBox.No)
            if reply == QtWidgets.QMessageBox.Yes:
                self.go()
            else:
                pass
Ejemplo n.º 2
0
 def flush(self):
     self.listWidget_src_files.clear()
     self.files.clear()
     self.matched_files.clear()
     count = 0
     cur_dir = self.data['path_src']
     if os.path.isdir(cur_dir):
         list_files = os.listdir(cur_dir)  # 列出文件夹下所有的目录与文件
         for each in list_files:
             path = os.path.join(cur_dir, each)  # 构造完整路径
             # 判断路径是否是一个文件目录或者文件
             # 如果是文件目录,继续递归
             if os.path.isdir(path):
                 # _files.extend(list_all_files(path))
                 continue
             if os.path.isfile(path):
                 self.files.append(each)
                 count += 1
                 item = QtWidgets.QListWidgetItem(each)
                 item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
                 if self.data['text_mask'] != '' and re.search(
                         r'.*%s.*' % self.data['text_mask'], each):
                     item.setBackground(QtGui.QColor('lightblue'))
                     self.matched_files.append(each)
                 self.listWidget_src_files.addItem(item)
         path = Utils.getSubStr(self.data['path_src'])
         self.label_path_src.setText(
             f'{path}    共{count}  匹配{len(self.matched_files)}')
Ejemplo n.º 3
0
    def init_ui(self):
        font = QtGui.QFont('NSimSun')
        font.setPointSize(15)
        font.setWeight(50)
        self.listWidget_src_files.setFont(font)
        self.listWidget_dec_files.setFont(font)
        self.lineEdit_mask.setPlaceholderText('掩码为空时,可以复制所有文件,但不能覆盖')
        self.lineEdit_fake.setPlaceholderText('选择覆盖时,只在源目录操作')
        self.lineEdit_mask.setAlignment(QtCore.Qt.AlignCenter)
        self.lineEdit_fake.setAlignment(QtCore.Qt.AlignCenter)
        qss1 = 'QListWidget { outline: none; border:1px solid gray; color: black;}' \
               'QListWidget::Item { width: 50px; height: 30px;}' \
               'QListWidget::Item:hover { background: #4CAF50; color: white; }' \
               'QListWidget::item:selected { background: #e7e7e7; color: #f44336; }' \
               'QListWidget::item:selected:!active { background: lightgreen}'
        qss2 = "QListWidget{border:1px solid gray; color:black; }" \
               "QListWidget::Item{padding-top:20px; padding-bottom:4px; }" \
               "QListWidget::Item:hover{background:skyblue; }" \
               "QListWidget::item:selected{background:lightgray; color:red; }" \
               "QListWidget::item:selected:!active{border-width:0px; background:lightgreen; }"
        self.listWidget_src_files.setStyleSheet(qss1)
        self.listWidget_dec_files.setStyleSheet(qss1)
        # self.listWidget_src_files.setViewMode(QtWidgets.QListView.ListMode)     # 设置为列表显示模式
        # self.listWidget_src_files.setFlow(QtWidgets.QListView.LeftToRight)      # 设置列表从左往右排列
        # self.listWidget_src_files.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        # self.listWidget_src_files.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)  # 屏蔽水平与垂直的滑动条
        # self.listWidget_src_files.setHorizontalScrollMode(QtWidgets.QListWidget.ScrollPerPixel)   # 像素滚动
        # QtWidgets.QScroller.grabGesture(self.listWidget_src_files, QtWidgets.QScroller.LeftMouseButtonGesture)  #  鼠标左键拖动

        self.label_path_src.setText('%s' %
                                    Utils.getSubStr(self.data['path_src']))
        self.label_path_dec.setText('%s' %
                                    Utils.getSubStr(self.data['path_dec']))
        self.lineEdit_mask.setText('%s' % self.data['text_mask'])
        self.lineEdit_fake.setText('%s' % self.data['text_fake'])
        self.checkBox.setChecked(self.data['enabled_cover'])

        self.lineEdit_mask.setAcceptDrops(True)
        self.lineEdit_mask.setDragEnabled(True)
        self.lineEdit_fake.setAcceptDrops(True)
        self.lineEdit_fake.setDragEnabled(True)
        # self.listWidget_src_files.setAcceptDrops(True)
        self.listWidget_src_files.setDragEnabled(True)
        # self.listWidget_dec_files.setAcceptDrops(True)
        self.listWidget_dec_files.setDragEnabled(True)

        self.flush()
Ejemplo n.º 4
0
    def flushDir(self):
        dir_path = self.data_path['dir_src']
        if not dir_path:
            AnimWin('没有源目录')
            return

        tmp = Utils.getSubStr(dir_path, 10)
        # print(tmp)
        self.label_src.setText(u'源文件目录:' + tmp)

        self.files_all.clear()
        self.listWidget_src.clear()
        self.checked = False

        self.files_all = Utils.files_in_dir(dir_path, ['.doc', '.docx'])
        if not self.files_all:
            return
        Utils.sort_nicely(self.files_all)

        for each in self.files_all:
            item = QtWidgets.QListWidgetItem(each)
            self.listWidget_src.addItem(item)

        self.statusbar.showMessage(f'总文件:{len(self.files_all)}    选中:0', 0)
Ejemplo n.º 5
0
    def slot_tools(self, action):
        try:
            # action = QtWidgets.QAction()
            text = action.text()
            # print(text)
            if text == '刷新':
                self.flushDir()

            if text == '打开':
                # fname = tkinter.filedialog.askdirectory()
                # print(fname)
                # return
                # dialog = QtWidgets.QFileDialog(self)
                # # dialog.setAcceptMode(QtWidgets.QFileDialog.AcceptOpen)
                # # dialog.setDirectory(self.data_path['dir_src'])
                # dialog.setFileMode(QtWidgets.QFileDialog.Directory)
                # # dialog.setOption(QtWidgets.QFileDialog.ShowDirsOnly, True)
                # dialog.setViewMode(QtWidgets.QFileDialog.List)
                #
                # dir_path = dialog.getExistingDirectory()

                dir_path = QtWidgets.QFileDialog.getExistingDirectory(
                    self, "选取源文件夹", self.data_path['dir_src'],
                    QtWidgets.QFileDialog.ShowDirsOnly)  # 起始路径
                if dir_path:
                    self.data_path['dir_src'] = dir_path
                    self.flushDir()

            elif text == '保存':
                dir_path = QtWidgets.QFileDialog.getExistingDirectory(
                    self, "选取保存目录", self.data_path['dir_dst'])  # 起始路径
                if dir_path:
                    self.data_path['dir_dst'] = dir_path
                    tmp = Utils.getSubStr(dir_path, 10)
                    self.label_dst.setText(u'源文件目录:' + tmp)

            elif text == 'word 文件合并':
                '''合并word文档'''
                self.files_src.clear()
                self.files_dst.clear()
                self.listWidget_dst.clear()

                self.files_src = set([
                    item.text()
                    for item in self.listWidget_src.selectedItems()
                ])
                if len(self.files_src) <= 0:
                    AnimWin('  请选择需要转换的文件!', self)
                    return

                path_all = []
                for each in self.files_src:
                    # print(each)
                    ps = os.path.join(self.data_path['dir_src'],
                                      each)  # 构造完整路径
                    path_all.append(ps)
                pd = os.path.join(self.data_path['dir_dst'],
                                  r'merged.doc')  # 构造完整路径
                # print(path_all)
                Utils.mergewords(path_all, pd)
                self.fun_callback(r'merged.doc')

            elif text == 'word 转 pdf':
                if not self.data_path['dir_src']:
                    AnimWin(' 请选择源文件所在目录!', self)
                    return
                if not self.data_path['dir_dst']:
                    AnimWin(' 请选择保存文件的目录!', self)
                    return
                if not self.files_all:
                    AnimWin(' 未发现源文件!', self)
                    return

                self.files_src.clear()
                self.files_dst.clear()
                self.listWidget_dst.clear()

                self.files_src = set([
                    item.text()
                    for item in self.listWidget_src.selectedItems()
                ])
                if len(self.files_src) <= 0:
                    AnimWin('  请选择需要转换的文件!', self)
                    return

                # print("-----start-----")
                # start = timeit.default_timer()
                # cpu_num = Utils.GetCpuInfo()[0]
                # pool = multiprocessing.Pool(cpu_num)
                # for each in self.files_src:
                #     # results = pool.apply_async(self.test, (i,))
                #     args = (each, self.data_path['dir_src'], self.data_path['dir_dst'])
                #     pool.apply_async(self.fun_process, args, callback=self.fun_callback)
                # pool.close()
                # pool.join()
                # elapsed = (timeit.default_timer() - start)
                # print("-----end-----")
                # print(f'用时:{elapsed}秒')

                print("-----start-----")
                start = timeit.default_timer()

                for each in self.files_src:
                    # print(each)
                    ret = self.fun_process(each, self.data_path['dir_src'],
                                           self.data_path['dir_dst'])
                    self.fun_callback(ret)
                elapsed = (timeit.default_timer() - start)
                print("-----end-----")
                print(f'用时:{elapsed}秒')

        except Exception as e:
            print(e)
Ejemplo n.º 6
0
    def go(self):
        if self.data['path_src'] == '' or not self.files:
            spirit = AnimWin("未找到目录或文件", self, 18)
            return
        try:
            self.listWidget_dec_files.clear()
            count = 0
            if self.data['enabled_cover']:  # 覆盖
                if not self.matched_files:
                    AnimWin("未匹配到合适的文件", self, 18)
                    return
                for each in self.matched_files:
                    new_name = each.replace(self.data['text_mask'],
                                            self.data['text_fake'])
                    path_src = self.data['path_src'] + '/' + each
                    path_dec = self.data['path_src'] + '/' + new_name
                    path_src = path_src.replace('/', '\\\\')
                    path_dec = path_dec.replace('/', '\\\\')
                    print(path_src)
                    os.rename(path_src, path_dec)
                    self.listWidget_dec_files.addItem(new_name)
                    count += 1
                    self.label_path_dec.setText(
                        '%s    %d个' %
                        (Utils.getSubStr(self.data['path_src']), count))
            else:  # 复制
                if self.data['path_dec'] == '':
                    AnimWin("保存目录不能为空", self, 18)
                    # QtWidgets.QSystemTrayIcon.showMessage()
                    return
                if self.data['text_mask'] == '':  # 全部复制
                    for each in self.files:
                        path_src = self.data['path_src'] + '/' + each
                        path_dec = self.data['path_dec'] + '/' + each
                        path_src = path_src.replace('/', '\\\\')
                        path_dec = path_dec.replace('/', '\\\\')
                        '''必须加双引号把路径括起来,才能解决路径里有空格的问题。中文也可'''
                        os.popen('copy "%s" "%s"' % (path_src, path_dec))
                        self.listWidget_dec_files.addItem(each)
                        count += 1
                else:
                    for each in self.matched_files:
                        new_name = each.replace(self.data['text_mask'],
                                                self.data['text_fake'])
                        path_src = self.data['path_src'] + '/' + each
                        path_dec = self.data['path_dec'] + '/' + new_name

                        path_src = path_src.replace('/', '\\\\')
                        path_dec = path_dec.replace('/', '\\\\')
                        print(path_src)
                        order = 'copy "%s" "%s"' % (path_src, path_dec)
                        os.system(order)
                        print(order)
                        self.listWidget_dec_files.addItem(new_name)
                        count += 1
                self.label_path_dec.setText(
                    '%s    %d个' %
                    (Utils.getSubStr(self.data['path_dec']), count))
        except Exception as e:
            print(e)
        finally:
            pass