最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基于面向?qū)ο笞鲆粋€文件夾整理工具

 更新時間:2024年02月07日 10:07:07   作者:微小冷  
這篇文章主要給大家介紹了Python基于面向?qū)ο笞鲆粋€文件夾整理工具,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

此前曾經(jīng)基于函數(shù)實現(xiàn)過這個功能:用Python做一個文件夾整理工具。這次基于面向?qū)ο蟮姆椒?,重新實現(xiàn)這個小工具。

本文中提到的FileSystem,來自于這里:Python根據(jù)文件后綴整理文件夾

目標

我們的目的是做一個像下面這樣的工具,前面兩個輸入框,用于輸入源路徑和目標就,下面的圖片、視頻、音樂表示在目標路徑中創(chuàng)建的文件夾,后面的文件后綴,表示將這類文件移動到對應(yīng)的文件夾中,加減號可以新增或刪除文件夾。

文件夾對話框

第一步,實現(xiàn)源路徑和目標路徑的輸入輸出,從而需要自定義一個組件,代碼如下

import tkinter as tk
import tkinter.ttk as ttk
from tkinter.filedialog import (askopenfilename,
    askopenfilenames, askdirectory, asksaveasfilename)
from tkinter.colorchooser import askcolor

class DialogButton(ttk.Frame):
    def __init__(self, master, 
        height, widthL, widthR, logtype, label=None, text=None, 
        frmDct={}, btnDct={}, enyDct={}, logDct={}):
        w = widthL + widthR
        super().__init__(master, 
            height=height, width = w, **frmDct)
        self.pack(fill=tk.X)

        self.text = tk.StringVar() if not text else text
        ttk.Entry(self, width=widthL, textvariable=self.text, 
            **enyDct).pack(side=tk.LEFT, fill = tk.X, expand=True)
        
        ttk.Button(self, width=widthR, 
            text=self.setLabel(logtype, label),
            command = self.Click, **btnDct).pack(side=tk.RIGHT, padx=5)
        self.logtype = logtype
        self.logDct = logDct

    def setLabel(self, key, label=None):
        if label:
            return label
        labelDct = {
            "文件"   : "選擇文件",
            "文件夾" : "選擇路徑",
            "多文件" : "選擇多個文件",
            "保存" : "存儲路徑",
            "顏色"   : "選擇顏色",
        }
        return labelDct[key]

    def Click(self):
        typeDct = {
            "文件"  : askopenfilename,
            "文件夾": askdirectory,
            "多文件": askopenfilenames,
            "保存"  : asksaveasfilename,
            "顏色"  : askcolor,
        }
        text = typeDct[self.logtype](**self.logDct)
        if self.logtype == "顏色":
            text = text[1]
        self.text.set(text)

    def get(self):
        return self.text.get()

    def set(self, txt):
        self.text.set(txt)

文件映射組件

在文件映射列表中,每一行的UI元素是完全相同的,故而可以新建一個文件映射組件,文件映射組件,主要由左右兩部分組成,左側(cè)是文件夾名,右側(cè)是對應(yīng)的文件后綴。從這兩個子組件出發(fā),可以為其設(shè)置初始化參數(shù)以及方法。先看源碼,再逐段解析

class ExFolder(ttk.Frame):
    def __init__(self, master,
        folder=None, ex=None, **options):
        super().__init__(master, **options)
        self.pack()

        self.folder = tk.StringVar()
        if folder : self.setFolder(folder)
        self.ex = tk.StringVar()
        if ex : self.setEx(ex)

        self.initWidgets()

    def initWidgets(self):
        ttk.Entry(self, textvariable=self.folder,
            width=10).pack(side=tk.LEFT, padx=2)
        ttk.Entry(self, textvariable=self.ex
            ).pack(side=tk.LEFT, fill=tk.X, expand=True)

    def getFolder(self):
        return self.folder.get()

    def setFolder(self, f):
        self.folder.set(f)

    def getEx(self):
        exs = self.ex.get().split(",")
        return [ex.strip() for ex in exs]

    def setEx(self, exs):
        if type(exs)==list:
            exs = ', '.join([ex.strip() for ex in exs])
        self.ex.set(exs)

首先,folder和ex分別是左右兩個組件對應(yīng)的可變文本,為了便于更新和調(diào)用,類中設(shè)計了兩組、四對便攜方法getFolder, setFolder和getEx和setEx。由于Folder中的內(nèi)容就是文件夾本身,所以設(shè)置和讀取方法僅僅是StringVar的二次封裝,而ex中的內(nèi)容則不然,需要對文本進行分割,并且實現(xiàn)字符串到列表的轉(zhuǎn)換。

完整組件

最后,是整個組件的布局,源碼如下

class FolderSplit(ttk.Frame):
    def __init__(self, master, **options):
        super().__init__(master, **options)
        self.pack()
        self.fs = FileSystem()

        self.initWidgets()

    def initWidgets(self):
        self.exForders = []
        pDct = dict(side=tk.TOP, expand=True, fill=tk.X)
        self.srcFolder = DialogButton(self, 5, 25, 8,
                                      "文件夾", label="源路徑")
        self.srcFolder.pack(**pDct)
        self.dstFolder = DialogButton(self, 5, 25, 8,
                                      "文件夾", label="目標路徑")
        self.dstFolder.pack(**pDct)

        btns = ttk.Frame(self)
        btns.pack(**pDct)
        ttk.Button(btns, text="? ",
            command=self.btnAddFolder).grid(row=0,column=0)
        ttk.Button(btns, text="?",
            command=self.btnDelFolder).grid(row=0,column=1)
        ttk.Button(btns, text="移動",
            command=self.btnMove).grid(row=0,column=2)
        ttk.Button(btns, text="撤銷",
            command=self.btnReMove).grid(row=0,column=3)

        self.exFrm = ttk.LabelFrame(self, text="文件夾映射表")
        self.exFrm.pack(**pDct)

        for k, v in self.fs.fileDct.items():
            self.addFolders(self.exFrm, k, v)

    def btnAddFolder(self):
        self.addFolders(self.exFrm, None, None)

    def addFolders(self, frm, folder, exs):
        ef = ExFolder(frm, folder, exs)
        ef.pack(side=tk.TOP, expand=True, fill=tk.X, padx=2, pady=1)
        self.exForders.append(ef)

    def btnDelFolder(self):
        if len(self.exForders) == 0: return
        self.exForders[-1].pack_forget()
        del self.exForders[-1]

    def setExDct(self):
        fileDct = {ef.getFolder() : ef.getEx()
                        for ef in self.exForders}
        self.fs.update(fileDct)

    def btnMove(self):
        src = self.srcFolder.get()
        dst = self.dstFolder.get()
        self.setExDct()
        if dst=="": dst = src
        self.fs.start(src, dst)

    def btnReMove(self):
        self.fs.restore()

三個已經(jīng)實現(xiàn)的功能按鈕,?用于新增一個文件夾映射組件,?則移除最后一個映射組件。移除組件時需要注意,不僅僅要把組件解綁,還要把組件對應(yīng)的實例刪掉。

核心功能被綁定在移動按鈕上,首先讀取源路徑和目標路徑,如果目標路徑未輸入,就在源路徑下工作。

接下來,將文件映射組件重新拆解為映射字典,最后調(diào)用FileSystem中的移動方法,實現(xiàn)所有文件的移動。

到此這篇關(guān)于Python基于面向?qū)ο笞鲆粋€文件夾整理工具的文章就介紹到這了,更多相關(guān)Python文件夾整理工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pycharm突然雙擊無法打開以及重啟電腦也不管用的解決過程

    pycharm突然雙擊無法打開以及重啟電腦也不管用的解決過程

    這篇文章主要介紹了pycharm突然雙擊無法打開以及重啟電腦也不管用的解決過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • Python實現(xiàn)GPU加速的基本操作

    Python實現(xiàn)GPU加速的基本操作

    本文簡單介紹了Python實現(xiàn)GPU加速的基本操作,文中運用大量代碼講解的非常詳細,有一定的參考價值,需要學(xué)習(xí)相關(guān)知識的小伙伴一起來看看吧
    2021-08-08
  • Python對象的生命周期源碼學(xué)習(xí)

    Python對象的生命周期源碼學(xué)習(xí)

    這篇文章主要為大家介紹了Python對象的生命周期源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python?Rich增加終端顯示視覺效果

    Python?Rich增加終端顯示視覺效果

    Python開發(fā)中,命令行界面(CLI)經(jīng)常被用于交互和數(shù)據(jù)展示,雖然命令行界面通常被視為簡單、枯燥的文本顯示區(qū)域,通過Python的Rich庫,為命令行界面帶來更多生機和視覺吸引力,本文帶大家探索Rich功能強大的Python庫,增強終端文本渲染,使輸出更具有吸引力和可讀性
    2024-01-01
  • python的變量和簡單數(shù)字類型詳解

    python的變量和簡單數(shù)字類型詳解

    這篇文章給大家詳細介紹了python的變量和簡單數(shù)字類型,文中介紹的很詳細,相信對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們可以參考借鑒
    2021-09-09
  • Python按鈕的響應(yīng)事件詳解

    Python按鈕的響應(yīng)事件詳解

    今天小編就為大家分享一篇關(guān)于Python按鈕的響應(yīng)事件詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Python count()函數(shù)實例詳解

    Python count()函數(shù)實例詳解

    count() 是Python的內(nèi)置函數(shù),可以「統(tǒng)計」字符串里指定「字符」或指定字符串出現(xiàn)的「次數(shù)」,這篇文章主要介紹了Python count()函數(shù)詳解,需要的朋友可以參考下
    2023-07-07
  • python批量連接服務(wù)器檢查容器是否正常

    python批量連接服務(wù)器檢查容器是否正常

    在生產(chǎn)中,我們可能有很多項目或者很多環(huán)境,可能會部署在幾百上千的服務(wù)器里面,我們該怎么定時去監(jiān)控這些服務(wù)器里面的容器服務(wù)器是否正常呢,本文就來為大家講解
    2024-01-01
  • 初探利用Python進行圖文識別(OCR)

    初探利用Python進行圖文識別(OCR)

    這篇文章主要介紹了初探利用Python進行圖文識別(OCR),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • python list排序的兩種方法及實例講解

    python list排序的兩種方法及實例講解

    本文主要介紹了python list排序的兩種方法及實例講解。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03

最新評論

芜湖市| 礼泉县| 唐海县| 寻甸| 海南省| 察隅县| 左贡县| 留坝县| 沐川县| 逊克县| 合山市| 炉霍县| 西藏| 资溪县| 武定县| 崇义县| 两当县| 东明县| 桑日县| 左权县| 璧山县| 景洪市| 晋州市| 通州区| 平安县| 临清市| 县级市| 固原市| 德江县| 东明县| 太仆寺旗| 定陶县| 永康市| 安吉县| 涞水县| 汾阳市| 班戈县| 和林格尔县| 镇赉县| 大渡口区| 宿州市|