一个简单的文件浏览器demo基于tkinter


from tkinter import *
import ttkbootstrap as ttk
from ttkbootstrap.tableview import Tableview
from tkinter.filedialog import askdirectory
from threading import Thread
from pathlib import Path
from datetime import datetime
from humanize import naturalsize


class FileViewer(ttk.Frame):
    def __init__(self,master):
        super().__init__(master, padding=15)
        self.pack(fill=BOTH,expand=YES)
        self.pathentry = StringVar(value=Path().cwd())
        self.createui()
        self._insert_row()


    def createui(self):
        toplableframe = ttk.Labelframe(
            self,
            text="文件浏览器",
            padding=(0,20,0,0)
        )
        toplableframe.pack(fill=X,expand=YES,anchor=N)

        self.lfentry = ttk.Entry(
            toplableframe,
            textvariable=self.pathentry,
            bootstyle="warning"
        )
        self.lfentry.pack(
            fill=X,
            side=LEFT,
            expand=YES
        )
        rightbutton = ttk.Button(
            master=toplableframe,
            text="浏览",
            command=self._rightbutton_click,
            bootstyle="warning",
            width=15
        )
        rightbutton.pack(
            side=RIGHT,
        )
        self._create_tableview()

    def _insert_row(self):
        path = self.pathentry.get()
        self.dt.delete_rows()
        def _thread_func():
            for i in Path(path).iterdir():
                filename = i.stem
                suffix   = i.suffix.replace(".","")
                stat     = i.stat()
                size     = naturalsize(stat.st_size)
                cgtime   = stat.st_ctime
                cgtime   = datetime.fromtimestamp(cgtime).strftime('%Y-%m-%d %H:%M:%S')
                abspath  = i.absolute()
                print(filename,suffix,size,cgtime,abspath)
                if not suffix:
                    suffix = "-"
                self.dt.insert_row(index=0, values=(filename, suffix, size, cgtime, abspath))

            self.dt.load_table_data()
        Thread(
            target=_thread_func
        ).start()


    def _rightbutton_click(self):
        path = askdirectory()
        if path:
            self.pathentry.set(path)
            self._insert_row()

    def _create_tableview(self):
        colors = app.style.colors

        coldata = [
            "文件名",
            {'text':"类型",'width':100},
            {'text':"大小",'width':150},
            {'text':"修改时间",'width':260},
            {'text':"绝对路径",'stretch':True}
        ]

        rowdata = [
            # ('A123', 'IzzyCo', 12,222222,2222222222),
            # ('A136', 'Kimdee Inc.', 45,2222222222,2222222222222222222222),
            # ('A158222222222', 'Farmadding Co.', 36,2222,2222222222222222222222222222222222222222222222222222222222222222222)
        ]
        ttk.Separator(self,bootstyle="dark").pack(fill=X,pady=20)

        self.dt = Tableview(
            master=self,
            coldata=coldata,
            # rowdata=rowdata,
            paginated=True,
            searchable=False,
            bootstyle="darkly",
            stripecolor=(colors.secondary, None),
            height=25,
            pagesize=25,
        )

        self.dt.pack(fill=BOTH, expand=YES)

        s = r"Smart - 8192 1622102435.9616566 C:\Users\LL\Desktop\CrystalDiskInfo8_12_0\Smart".split()

if __name__ == '__main__':
    app = ttk.Window(
        title="文件浏览器demo  - Poweredby Jackma",
        themename="darkly",
        minsize=(1200,1000)
    )
    FileViewer(app)
    app.place_window_center()
    app.mainloop()

内容概要:本文档详细介绍了Android高级控件的使用方法及其应用场景。首先讲解了下拉列表Spinner,包括其两种表现形式(下拉列表形式和对话框形式),并介绍了适配器Adapter的基础概念及其三种主要类型:数组适配器ArrayAdapter、简单适配器SimpleAdapter和基本适配器BaseAdapter,重点阐述了它们各自的特点和使用步骤。接着,文档对列表视图ListView进行了深入探讨,涉及分隔线样式、按压背景等属性的设置方式。随后,描述了网格视图GridView,详细解释了其拉伸模式的效果及取值。对于翻页视图ViewPager,不仅介绍了基本概念,还展示了翻页标签栏PagerTabStrip的具体应用,特别是用于创建启动引导页。最后,文档介绍了碎片Fragment的概念,强调了其在大屏设备上的优势,以及与ViewPager结合使用的实战案例——记账本应用。 适合人群:有一定Android开发基础,希望深入了解并掌握高级控件使用的开发者。 使用场景及目标:①掌握下拉列表、列表视图、网格视图、翻页视图等高级控件的实现细节;②理解适配器的作用及其不同类型的使用场景;③学会使用Fragment优化应用界面布局,提高用户体验;④通过具体案例(如记账本),将所学控件应用于实际开发中。 阅读建议:本文档内容详实,涵盖多种高级控件的理论知识与实践技巧。建议读者在学习过程中结合官方文档或相关资料进行对比研究,同时动手实践,以便更好地理解和掌握这些控件的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值